__dict__对象下隐藏的内置变量,当中保存着当前对象的所有变量
实例化时,寻找变量先从实例变量中寻找,找不到则在类变量中继续寻找,再找不到则到父类中继续寻找(继承的特性)
调用实例方法时,不需要传入self(自动传入),self指代当前对象,必须写出来,且实例方法的第一个参数必须是self。
在实例方法里访问类变量:类名.类变量;或者:sellf. __class __.变量名.
类方法:定义类方法时不用self,用cls(约定俗成),在类方法上方加上装饰器@classmethod,如:
sum=0
@classmethod
def plus_sum(cls):
cls.sum+=1
print(cls.sum)
静态方法:@staticmethod
def add(x,y):
print(‘a’)
静态方法中没有任何指代传入(self/cls),可以被对象和类调用。尽量少用
内部调用:类中的方法可以调用该类中另一个方法
所有对类中变量的修改最好通过类的方法实现
私有成员与公有成员:
python中用双下划线__标识私有成员,如:__private;但前后都有双下划线时则不是私有,如:__method __
python可在类的外部定义新的变量,如:
(类的外部)对象名.变量名=…;所属对象的__dict__中也会随之增加一个名为 变量名 的变量
python中的私有性很low 私有变量其实就是名字被改成了_类名__变量名
继承 class 类名(父类名):
子类继承父类的类变量,构造函数,实例变量,方法
python支持多继承
子类中调用父类构造函数来给变量初始化:父类名.__init __(self,变量) ; 可以将__init __看作一个实例方法,一个类调用实例方法本身是不正确的(类是抽象的而实例时具体的),但可用这种方式(通过类直接调用实例方法)初始化变量,即普通的方法调用(与实例化不同).
如: Student.do_homework(student1) 很low
允许子类和父类方法同名,python优先调用子类方法
super关键字: 如 super(子类名,self).__init __(变量)
这里__init __是构造函数
super(Student,self).do_homework()
子类方法调用父类方法时常用