Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向使用_插槽的对象添加属性___Python_Slots - Fatal编程技术网

Python 向使用_插槽的对象添加属性__

Python 向使用_插槽的对象添加属性__,python,slots,Python,Slots,我想向使用插槽的对象添加一个属性。我知道这是一个黑客,不应该使用 但是有没有办法绕过插槽的限制?没有。如果您没有将“\uuu dict\uuuuu”声明为插槽之一,那么该类具有固定的底层结构布局,没有用于动态定义属性的空间;你能做的最好的事情就是从头开始重新定义类并替换它,希望在你开始之前没有人创建一个原始类的实例,或者创建一个不需要在主体中做任何特殊事情的子类,只需传递;如果它不声明uuuu slots uuuuuuuuuuuu,它将以uuuu dict uuuuuuuu/uuuuuuuu w

我想向使用插槽的对象添加一个属性。我知道这是一个黑客,不应该使用

但是有没有办法绕过插槽的限制?

没有。如果您没有将“\uuu dict\uuuuu”声明为插槽之一,那么该类具有固定的底层结构布局,没有用于动态定义属性的空间;你能做的最好的事情就是从头开始重新定义类并替换它,希望在你开始之前没有人创建一个原始类的实例,或者创建一个不需要在主体中做任何特殊事情的子类,只需传递;如果它不声明uuuu slots uuuuuuuuuuuu,它将以uuuu dict uuuuuuuu/uuuuuuuu weakref uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

即使在定义类之后更改_u插槽_uu也不会起任何作用;插槽在该点烘焙到类中;您可以删除MyClass。\uuuuu插槽\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

你基本上有两个选择

不要使用插槽。您将能够向hearts内容添加属性,并且根据您使用该类的方式,您可能甚至不会注意到性能差异

提前添加属性,但将其设置为“无”或sentinal值,然后填充属性,而不是稍后创建属性

如果您试图使类上的属性动态化,那么“插槽”根本不是您的正确选择。

您可以通过创建一个同名的子类,然后用其子类替换父类来修改“插槽”。请注意,您可以对任何模块中声明和使用的类执行此操作,而不仅仅是您的

还要注意,这个问题已经回答了好几次了。有关更多详细信息,请参阅。
实际上,在您询问时没有我的答案,但有其他答案的问题=

如果您详细说明为什么要这样做,它可能会帮助我们解决您的实际问题。您想为实例添加属性还是为类添加槽?