gpt4 book ai didi

python - 对象的描述符不适用于对象,使用 __slots__

转载 作者:行者123 更新时间:2023-12-05 06:17:43 24 4
gpt4 key购买 nike

早上好

我在尝试在我的一门类(class)中使用 __ 插槽 __ 时遇到问题。我想用它来优化 Classifier 对象的多个实例的创建。我正在使用 Python 3.7.1。

这行得通

class Classifier() :

def __init__(self, own_storage, partner_storage, decision, strength) :

self.own_storage = own_storage
self.partner_storage = partner_storage
self.decision = decision
self.strength = strength

这行不通

class Classifier() :

__slots__ = ('own_storage', 'partner_storage', 'decision', 'strength')

def __init__(self, own_storage, partner_storage, decision, strength) :

self.own_storage = own_storage
self.partner_storage = partner_storage
self.decision = decision
self.strength = strength

这里是我创建 Classifier 的所有实例的地方(它是另一个类的方法)

def allClassifiers(self) :

cs = []
own_range = []
partner_range = []

for i in range(1, self.agent.model.n_types + 1) :

own_range.append(i)
own_range.append(-i)
partner_range.append(i)
partner_range.append(-i)


for own in own_range :

for partner in partner_range :

for decision in [0, 1] :

cs.append(Classifier(own, partner, decision, i))

return cs

我遇到的错误:

Traceback (most recent call last):

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\test.py", line 53, in <module>
m = Model(10000, 1, 1, init_distribution = [0, 1, 1, 0], state_t = "uniform")

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\model.py", line 53, in __init__
a = Agent(id_, i, self, production_i, h)

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\agent.py", line 31, in __init__
self.cs = ClassifierSystem(self)

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\classifier_system.py", line 17, in __init__
self.classifiers = self.allClassifiers()

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\classifier_system.py", line 41, in allClassifiers
cs.append(Classifier(own, partner, decision, i))

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\classifier.py", line 7, in __init__
self.own_storage = own_storage

TypeError: descriptor 'own_storage' for 'Classifier' objects doesn't apply to 'Classifier' object

我看过多个关于如何使用 __ 插槽 __ 的示例,但我无法理解我在哪里犯了错误。感谢您的帮助。

编辑:如果我尝试这段代码,它会起作用

class Classifier() :

__slots__ = ('own_storage', 'partner_storage', 'decision', 'strength')

def __init__(self, own_storage, partner_storage, decision, strength) :

self.own_storage = own_storage
self.partner_storage = partner_storage
self.decision = decision
self.strength = strength

c = []
for i in range(0, 70) :
c.append(Classifier(1, 2, 1, i))

此外,如果我将此代码的最后 3 行放入 allClassifiers 函数(我在问题中输入的代码的第三部分),它会起作用。

编辑 2:我对 Spyder 的工作方式有些不理解。从 shell 运行程序,它在任何情况下都能完美运行。使用 Spyder,在删除之前运行的变量后,现在插槽版本可以使用,没有它的版本会给我这个错误:

Traceback (most recent call last):

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\test.py", line 53, in <module>
m = Model(10000, 1, 1, init_distribution = [0, 1, 1, 0], state_t = "uniform")

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\model.py", line 53, in __init__
a = Agent(id_, i, self, production_i, h)

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\agent.py", line 31, in __init__
self.cs = ClassifierSystem(self)

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\classifier_system.py", line 17, in __init__
self.classifiers = self.allClassifiers()

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\classifier_system.py", line 41, in allClassifiers
cs.append(Classifier(own, partner, decision, i))

File "C:\Users\Diru\Desktop\Internship\Sketch\classes\classifier.py", line 7, in __init__
self.own_storage = own_storage

AttributeError: 'Classifier' object has no attribute 'own_storage'

至少现在我知道问题是我不知道如何使用Spyder

最佳答案

我遇到了同样的问题。
解决方案:重启 Spyder。
希望它能解决问题。

关于python - 对象的描述符不适用于对象,使用 __slots__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61478651/

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