gpt4 book ai didi

python 当我使用 '__slots__' 时

转载 作者:行者123 更新时间:2023-11-30 23:15:49 24 4
gpt4 key购买 nike

最近在学习Python,但是我有一个关于__slots__的问题。我认为是为了限制Class中的参数,同时也限制Class中的方法?

例如:

from types import MethodType

Class Student(object):
__slots__=('name','age')

当我运行代码时:

def set_age(self,age):
self.age=age
stu=Student()
stu.set_age=MethodType(set_age,stu,Student)
print stu.age

An error has occurred:
stu.set_age=MethodType(set_age,stu,Student)
AttributeError: 'Student' object has no attribute 'set_age'

我想知道,为什么这个类不使用set_age?

最佳答案

使用__slots__意味着您不会为每个类实例获得一个__dict__,因此每个实例都更加轻量级。缺点是不能修改方法,也不能添加属性。而且您无法执行您尝试执行的操作,即添加方法(这将是添加属性)。

此外,Pythonic 方法不是实例化 MethodType,而是简单地在类命名空间中创建函数。如果您尝试动态添加或修改函数(如猴子修补一样),则只需将该函数分配给该类,如下所示:

Student.set_age = set_age

将其分配给实例,当然,如果它使用__slots__,则不能这样做。

这是__slots__文档: https://docs.python.org/2/reference/datamodel.html#slots

关于python 当我使用 '__slots__' 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28057091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com