今天学习目标,理解类属性和实例属性
测试代码如下
#!/usr/bin/env python3 # -*- coding: utf-8 -* '2016-11-26class测试用例' __author__ = 'CivLcf' class Student(object): name ='ddd' class StudentNew(object): def __init__(self, name): self.name = name s = Student() s1 = StudentNew('s1') if print(hasattr(s, 'name')): print('s.name true') else: print('s.name false') if hasattr(Student, 'name'): print('Student.name true') else: print('Student.name false') if print(hasattr(s1, 'name')): print('s1.name true') else: print('s1.name false') if hasattr(StudentNew, 'name'): print('StudentNew.name true') else: print('StudentNew.name false') #删除属性 del s.name del s1.name if print(hasattr(s, 'name')): print('s.name true') else: print('s.name false') if hasattr(Student, 'name'): print('Student.name true') else: print('Student.name false') if print(hasattr(s1, 'name')): print('s1.name true') else: print('s1.name false') if hasattr(StudentNew, 'name'): print('StudentNew.name true') else: print('StudentNew.name false')
运行结果:
s.name true Student.name true s1.name true StudentNew.name false s.name true Student.name true s1.name false StudentNew.name false
由以上测试可以看出 self.name 中的属性是实例属性
上面代码会抛一个异常, 在删除s.name属性的时候,由于student中name属性属于类属性,所以无法直接通过删除实例属性来进行删除
总结:
实例的属性可以覆盖类属性
self.XXX是实例属性
以后代码中不要出现实例属性与类属性同名的问题,否则会引起结果不对
mark 2019-11-26