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