类
类命名规则
类成员变量
普通变量
私有变量
双下划线开头变量:xx, name。 双下划线开头在python中自动给予他私有访问权限
注意:如果对私有变量result赋值操作__result = -1,那么会给对象添加一个__result的变量但是不会改变原来定义好的私有变量result。因为私有变量在对象内存中的名字不是它本身,而是被python改为了_类名.__私有变量名的方式。在外部也不能使用_类名.__私有变量名的方式给私有变量赋值。
系统内置变量
protected变量
前面一个单下划线:_xx外部可以访问,和普通变量一样可以随意修改,只不过是一个约定。
类变量
类变量与实例变量
类变量属于类不属于实例,是由多个实例共享的
访问类变量需要类名.类变量名 或者self.__class__.类变量名
实例变量是以实例为单位,每一个实例的实例变量是不共享的
实力变量要用self.实力变量名赋值
类函数
构造函数
# 构造函数 不能返回字符串# 构造函数形式参数必须有selfdef __init__(self,name, age):self.name= nameself.age= age
静态函数
# 静态方法 @staticmethod 方法参数可以什么都不加 类和对象都可以调用@staticmethoddef static_method():pass
同类方法一样可以通过类名或者对象访问静态函数
不能访问self.实力变量
与另外两种函数的区别:
静态函数没有必须的形式参数(构造函数必须有self,类方法必须有cls)
类方法
操作类变量
#类方法 和别的方法的区别就是必须加上@classmethod cls是默认类方法的参数,# 判断是不是类方法就看有没有@classmethod@classmethoddef sum_plus(cls):cls.sum += 1;print(cls.sum)
调用方式:类名.类方法名 或 对象.类方法名(不推荐)
不能访问self.实力变量
类方法与实例方法的区别:
类方法操作类变量,实例方法操作实例变量
继承
父类:
class Human():def __init__(self, age,name):self.name=nameself.age=agedef print_name(self):print('parent:'+self.name)
子类:
from Human import Human#继承的时候在类后面加上(父类)class Student(Human):def __init__(self,name,age,school):#调用父类构造方法# 这种方法不符合开闭原则 不建议使用Human.__init__(self,name,age);# 建议使用以下方法#调用父类构造方法,形式参数(自己类名,self)super(Student,self).__init__(age,name)self.school=schooldef print_name(self):#调用父类方法super(Student,self).print_name();print('student')student = Student('Andrew',10,'school');student.print_name()
调用父类方法固定格式:super(自己类名,self).父类方法名()
