实例属性和类属性
class Student(object):
name = "Student" #类属性
def __init__(self, name):
self.name = name #实例属性
添加类属性有两种方法,一种是 __init__
中的self直接添加,或者通过实例绑定
s = Student()
s.score = 99
当实例属性和类属性冲突的时候,实例属性会屏蔽掉类属性.下面的例子很好的说明了它:
class Student(object):
name = 'Student'
s = Student()
print(s.name) #Student
s.name = 'Micheal' #给实例绑定name属性
print(s.name) #Micheal 实例属性屏蔽掉了类属性
print(Student.name) #Student 但类属性仍然存在
del s.name #会删除实例的name属性
print(s.name) #Student
一般都是给一个实例绑定一个属性,但若是绑定方法,可按以下方法设置:
from types import MethodType
class Student(object):
pass
def set_age(self, age):
self.age = age
s = Student()
s.set_age = MethodType(set_age, s) #s.set_age就是设置好了之后的方法名称
s.set_age(25) #调用方法
print(s.age)
但是给一个实例创建的方法,无法给别的实例创建属性,会报错
s2= Student()
s2.set_age()
若想绑定了之后所有实例都可以用, 那么可以给类绑定方法
def set_score(self, score):
self.score = score
Student.set_score = MethodType(set_score, Student)
s.set_score(100)
print(s.score) #100
s2.set_score(99)
print(s2.score) #99