python 面向对象(二)成员
##################################总结###########################
类的成员:
变量:
实例变量 对象.属性=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()
########结果###########
把秘密告诉了太白, 第二天所有人都知道了和嫂子的故事
潘潘