想喝猪肝汤

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

实例属性和类属性

给实例绑定属性的方法是通过实例变量,或者通过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
测试通过
posted on 2018-10-30 23:28  想喝猪肝汤  阅读(72)  评论(0)    收藏  举报