python 面向对象(二)成员

时间:2021-08-13 00:53:41

##################################总结###########################

类的成员:
  变量:
    实例变量      对象.属性=xxx
    类变量       共享给所有该类的对象 类.变量
  方法:
    实例方法,   对象.方法()     ###加了self的.调用的时候。必须用对象去访问. (重点)
      def method(self):
        pas
    类方法,一般都使用类名.方法() ###当方法需要传递类名的时候. 需要类方法. 
      @classmethod
      def method(cls):
    静态方法,写在类力的函数,一般使用类名.方法()  ###当你的方法不需要传递当前类的对象的时候。
      @staticmethod
      def method():
        pass
例子########
class Foo:
  def m1(self):
    pass
  @classmethod
  def m2(cls)
    pass
  @staticmethod
  def m3():
    pass
f=Foo()
f.m1()
Foo.m2()
Foo.m3()
属性:
  @property
  作用:把一个方法变成属性.
  有些属性必须经过计算而得到(比如出生算年纪)
  @property
  def age(self):
    run 2018-self.birth
print(p.age)#没加小括号
私有:
  __开头的东西就是私有的
   只有在自己类中使用
class Foo:
name='aa'
def __init__(self,name):
self.name=name
def m1(self):
print('m1111')
@classmethod
def m2(cls):
return cls.name
@staticmethod
def m3(a,b):
return a+b
@property
def bin(self):
return '这个是%s'%(self.name)
f=Foo('zaizai')
f.m1()#调用方法
cls=Foo.m2()
print(cls)#普通方法,若要在不用类名中 每次都要self.name
static=Foo.m3(1,2)
print(static)#当你的方法不需要传递当前类的对象的时候
print(f.bin)
class Person:
def __init__(self):
pass
# 实例方法需要传递类的对象 self
def think(self):
print("人能思考")
# 静态方法不需要传递对象或者类
@staticmethod # 静态方法
def jisuan(a, b):
print("我来过这里")
return a + b
# 类方法: 第一个参数传递的是类名
@classmethod
def clsMethod(cls): # cls表示的类
p = cls() # 可以动态的创建对象.
print("我是一个类方法", p) p = Person()
p.think() #实例方法

# 静态方法的调用:
c = Person.jisuan(1, 2) # 类名访问
print(c) #类方法调用
Person.clsMethod() # 类方法默认第一个参数接收的是类名
p.clsMethod() # 在调用类方法的时候. 默认的把类名传递给类方法 
#<bound method Person.he of <class '__main__.Person'>>
Person.clsMethod  # 推荐类名调用

结果:

我来过这里
3
我来过这里
8
我是一个类方法<class '__main__.Person'>

4.用方法来描述一个属性

 @property

 方法只能有一个参数

方法必须有返回值

class Person:
def __init__(self, name, gender, birth):
self.name = name
self.gender = gender
self.birth = birth # 2000 2018
# 年龄 -> 应该是算出来的. 而不是直接存储
@property # 把一个方法更改成一个属性, 每次拿属性的时候都会自动的去执行这个方法
# 方法的返回值就是属性值
def age(self): # 实例方法
print("我是方法")
return 2018 - self.birth p1 = Person("武sir", "未知", 2000)
print(p1.age) # 看着像一个变量一样使用, 实际上这里是调用的一个方法 不用加()
print(p1.age)
# p1.age = 26 # 不可以的, 因为age是一个方法. 不是一个变量

5.私有

只能在自己类中访问. 带有前置双下环线的内容

__方法
__变量
__类变量
都是私有. 比人访问不到. 包括他儿子.

class Person:
__qie = "潘潘" # 类变量 def __init__(self, name, mimi):
self.name = name
self.__mimi = mimi # 私有内容 实例变量 def gaosu(self):
print(f"把秘密告诉了太白, 第二天所有人都知道了{self.__mimi}")
print(Person.__qie) # 私有的类变量只能在类中调用
# return self.__mimi def __yue(self): # 私有的实例方法
print("我要和宝宝约") @staticmethod
def __koujiao():
print("test希望和嫂子一起抠脚") @classmethod
def __fangqi(cls):
print("和嫂子一起放气")
p = Person("wusir", "和嫂子的故事")
# print(p.__mimi) # 私有的内容只能在类里面调用
p.gaosu() # print(Person.__qie)
a = Person("wusir", "嫂子的故事")
# a.__yue()
# Person.__koujiao() ########结果###########

把秘密告诉了太白, 第二天所有人都知道了和嫂子的故事
潘潘

 

python 面向对象(二)成员的更多相关文章

  1. python面向对象&lpar;二&rpar;——类成员

    Python面向对象    类成员 1.字段         普通字段    属于对象         静态字段    属于类   2.方法 普通方法   触发者是对象    括号里至少一个参数 se ...

  2. python面向对象之类成员

    面向对象编程: OOP编程是利用类和对象来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得简单,并可以大大提高程序开发效率.另外,基于面向对象的程序可 ...

  3. python面向对象二

    1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Stud ...

  4. JavaScript面向对象&lpar;二&rpar;——成员属性、静态属性、原型属性与JS原型链

      前  言 JRedu 上一篇博客中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方 ...

  5. Python面向对象之成员修饰符

    对于这些类成员有修饰符 之前定义字段country任何对象都可以访问,是公有的 可以定义为私用属性,只有类内部的方法可以调用,外部不能直接调用,但是可以间接调用 vim day7-10.py #!/u ...

  6. Python面向对象-类成员

    类的成员可以分为三大类:字段.方法和属性: 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在 ...

  7. python 面向对象二 类和实例

    一.类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法, ...

  8. 疯狂java学习笔记之面向对象&lpar;二&rpar; - 成员变量与局部变量

    Java变量按其作用域可分为:成员变量和局部变量.注意:在Java中是没有全局变量这个概念的 一.成员变量: 成员变量是在类中定义的变量,具体可分为类变量与实例变量--有无static修饰 实例变量的 ...

  9. python面向对象之类成员修饰符

      类的所有成员分为: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能访问 私有成员和公有成员的定义不同:私有成员命名时,前两个字符是下划线.(特殊成员除外,例如:__init__.__c ...

随机推荐

  1. Python打包成exe:屡试不爽的cxfreeze!

    Python用cxfreeze打包,不用像什么Pyinstaller繁杂的写配置文件,一行命令足以! 安装好cxfreeze后,进行python脚本目录,执行: C:\Python27\Scripts ...

  2. Centos5&period;8 安装 Redmine

    安装Ruby 到 /opt/ruby-2.0.0 -p481.tar.gz cd ruby--p481 ./configure --prefix=/opt/ruby- sudo make sudo m ...

  3. Struts2笔记——struts常用标签

    使用struts标签前,首先要配置struts2架构,然后导入标签库,jsp插入如下语句: <%@taglib uri="/struts-tags" prefix=&quot ...

  4. DoctrineMigrationsBundle

    数据库迁移特征是数据库抽象层的扩展,允许你用编程的方式,安全.方便.标准化实现数据库结构的更新. 安装 首先使用composer安装 $ composer require doctrine/doctr ...

  5. HDU 4160 Dolls (最小路径覆盖&equals;顶点数-最大匹配数)

    Dolls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  6. &lbrack;51nod1614&rsqb;刷题计划

    大赛将至,摆在你面前的是n道题目,第 i(1 ≤ i ≤ n) 道题目能提升 ai 点智力值,代码量为 bi KB,无聊值为 ci ,求至少提升m点智力值的情况下,所做题目代码量之和*无聊值之和最小为 ...

  7. 广商博客冲刺第三天new

    第二天沖刺傳送門 第三四天沖刺傳送門 这一天我们主要是弄网页前台设计跟框架设计,这方面主要是由张奇聪负责.我们在amaze ui,smart ui,angularjs+bootstrap中挑选,最终选 ...

  8. centos7创建docker tomcat镜像

    1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: 必须是 64 位操作系统 建议内核在 3.8 以上 通过以下命令查看您的 CentOS 内核: 1 # uname -r 2 安装 ...

  9. js中sort&lpar;&rpar;方法冒泡排序模拟

    1.sort()方法概述 sort() 方法用于对数组的元素进行排序. 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点, 首 ...

  10. 【linux】Linux查看各类日志

    Log位置: /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关的日志信息 /var/log/ma ...