为了账号安全,请及时绑定邮箱和手机立即绑定

__slots__为什么没有报错,依然赋值了没有的age

class Person:

    __slots__ = ('name','gender')

    def __init__(self,name,gender):

        self.name = name

        self.gender = gender


class Student(Person):

    __slots__ = ('name', 'gender','score')

    def __init__(self, name, gender,score):

        super().__init__(name, gender)

        self.score = score


Student.age = 12

s = Student('qrh','男',88)


print(s.name,s.gender,s.score,s.age) #》》qrh 男 88 12


正在回答

2 回答

__slots__ 只能限制为实例对象动态添加属性和方法,而无法限制动态地为类添加属性和方法。因为你是直接往类里面添加属性和方法,所以实例s能访问到age这个Student类的属性

0 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//626802010001c5a613570618.jpg

我已经晕掉了,为什么还是执行成功了呢,age的值,也打印出来了:12

0 回复 有任何疑惑可以回复我~
#1

初_

s = Student('qrh','男',88) s.age=12 print(s.age) 这样写就报错了呀。类实例。
2022-04-27 回复 有任何疑惑可以回复我~
#2

dotasfans

你这个图实在不清晰。另外,我也跟你发生了同样的问题,在定义person类时,这么写:Person(object) 就没有问题了,只能说这是版本的问题吧。我在自己电脑上3.7中不写也行
2022-07-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

__slots__为什么没有报错,依然赋值了没有的age

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信