给实例绑定属性的方法是通过实例变量,或者通过self变量
class Student(object):
def __init__(self, name):
# 实例属性
self.name = name
s = Student('Bob')
s.socre = 90
class Student(object):
# 类属性
name = 'Student'
当定义了类属性后,这个属性归类所有,但类的所有实例都可以访问
class Student(object):
name = 'Student'
s = Student() # 创建实例
print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
s.name = 'Michael' # 给实例s绑定name属性
print(s.name) # 由于实例属性优先级比类属性高,这里会屏蔽类的name属性
print(Student.name) # 但是类属性并未消失, 通过这种方式仍然可以访问
del s.name # 删掉实例s的name属性
print(s.name) # 删除掉后,实例的name属性没有了, 这里打印的就是类的属性了
Student
Michael
Student
Student
Tips:在实际项目中,千万别把实例属性和类属性使用相同的变量名,因为相同实例名称的实例属性将屏蔽掉类属性 删掉实例属性后,再使用相同的名称,访问到的是类属性
# 练习
# 为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:
class Student(object):
count = 0
def __init__(self, name):
self.name = name
Student.count += 1 # 添加的代码
# 测试
if Student.count != 0:
print('测试失败!')
else:
bart = Student('Bart')
if Student.count != 1:
print("测试失败!")
else:
lisa = Student('Bart')
if Student.count != 2:
print('测试失败!')
else:
print('Student:', Student.count)
print('测试通过')
Student: 2
测试通过