如何给类动态添加属性:实例化后可以直接增加其他属性
class Student(object):
def __init__(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score
student = Student('imaitian', 'male', 100)
# 动态增加一个属性
student.age = 18
print(student.age)
print(getattr(student, 'age'))
属性添加成功,结果:18
如何禁止添加动态属性: 使用__slots__ = 限制添加属性
class Student(object):
__slots__ = ('name', 'gender', 'score')
def __init__(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score
student = Student('imaitian', 'male', 100)
# 动态增加一个属性
student.age = 18
print(student.age)
print(getattr(student, 'age'))
属性添加失败,结果为:
AttributeError: 'Student' object has no attribute 'age'
如何在继承类里添加属性:在 __slots__ = 里增加想要添加的属性
class Person(object):
__slots__ = ('name', 'gender')
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Student(Person):
__slots__ = ('score',)
def __init__(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score
s = Student('imatian', 'male',100)
print(s.score)
或者:
class Person(object):
__slots__ = ('name', 'gender')
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Student(Person):
__slots__ = ('score',)
def __init__(self, name, gender, score):
super(Student, self).__init__(name, gender)
self.score = score
s = Student('imatian', 'male',100)
print(s.score)