今天學習目標,理解類屬性和實例屬性
測試代碼如下
#!/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