Python中类属性和self属性的区别
今天学习目标,理解类属性和实例属性
测试代码如下
#!/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
浙公网安备 33010602011771号