上面我们说到了Python是动态语言,可以在运行时给实例对象添加属性。但是如果我们不想让别人添加其他属性,进行限制该怎么办呢?
我们可以使用__slots__来对添加的属性进行限制。
class Person(object):
__slots__ = ("name", "age")
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print("我叫%s,我的年龄是%d"%(self.name, self.age))
p = Person("小明", 20)
p.sex = "男"
print(p.sex)
当我们在进行添加新的属性的时候就会报错
AttributeError: 'Person' object has no attribute 'sex'
需要注意的是:__slots__定义的属性仅对当前实例其作用,对继承的子类不起作用。
class Person(object):
__slots__ = ("name", "age")
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print("我叫%s,我的年龄是%d" %(self.name, self.age))
p = Person("小明", 20)
class Student(Person):
print("学生")
stu = Student("小红",18)
stu.task = "好好学习"
print(stu.name)
print(stu.age)
print(stu.task)
打印结果:
学生
小红
18
好好学习