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