类对象是一组相关的数据信息(属性),以及针对这组数据信息的操作(函数)的集合。
实例属性
用self修饰的属性为实例属性,这些属性通常是某个对象的属性,如一个人的名字。
class Student: def __init__(self,name): self.name=name
类属性
类属性也叫类变量,通常为这个类所有对象的集体特征。如一个类所有对象的个数,total_count确实是这个类的相关属性,但显然不属于某个对象个体 ,
class Student: min_age=16 total_count=0 def __init__(self,name): self.name=name
对于类变量,我们可以直接通过类名来访问,也可以通过实例来访问。
print(Student.min_age) s1=Student("Ema") print(s1.min_age)
成员方法
成员变量是类的个体的属性,成员方法是与之对应的类的个体的函数;类变量是属于整个类的全局属性,类方法是与之对应的全局函数。
类方法
@classmethod def next_id(cls): cls.total_count+=1 return cls.total_count
1)函数上有一个特殊的标记@classmethod(函数装饰器),如名字所示,它用于标识一个函数为类方法。
2)函数的第一个参数名不再是我们是熟悉的self,而是cls(表示class)。在调用发生的时候,Python会把类(而不是类的某个实例)作为第一个参数传到这个函数里。
静态方法
除了@classmethod,类中定义的方法还经常会用到另外一个函数装饰器@staticmethod,用于标识类的静态方法。静态方法被调用时,Python不会将类作为第一个参数传进来,而是会严格按照调用方提供的参数来调用。
class AreaCal: @staticmethod def cal_rec_area(width,height): return width*height print(AreaCal.cal_rec_area(2,3))
在被调用的时候,因为没有类或者对象被自动传递,静态方法的参数列表会更简洁,逻辑会更清晰,并且因为减少了参数的传递,程序的执行会更快。当一个类方法的实现中并没有用到类变量时,我们就应该考虑把这个函数标记为静态方法