我目前正在實施開槽元類使用type()
:Python的__slots__元類問題
type(i,(), {'__slots__': tuple(data)
我當然會非常有槽保持,因爲我有一個會從他們的更小的內存佔用和提高訪問速度受益的用例。
當我這樣做:但是當我運行
dir(slotted_class)
>>>['__class__',
'__delattr__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__le__',
'__lt__',
'__module__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__slots__',
'__str__',
'__subclasshook__',
'slotted_attribute1',
'slotted_attribute2',
'slotted_attribute3',
'slotted_attribute4']
:
slottedclass.slotted_attribute1
我收到以下錯誤:
>>> AttributeError Traceback (most recent call last)
<ipython-input-58-88291109fa74> in <module>()
----> 1 slotted_class.slotted_attribute1
AttributeError: slotted_attribute1
編輯:欲瞭解更多的信息,甚至更多的困惑: 如果我直接實施一個等價物而不使用元類:
class slottedclass_non_meta(object):
__slots__ = ['slotted_attribute1', 'slotted_attribute2', 'slotted_attribute3', 'slotted_attribute4']
def __init__(self, slotted_attribute1, slotted_attribute2, slotted_attribute3, slotted_attribute4):
self.slotted_attribute1, self.slotted_attribute2, self.slotted_attribute3, self.slotted_attribute4 = slotted_attribute1, slotted_attribute2, slotted_attribute3, slotted_attribute4
然後,讓這個比較 目錄(slottedclass)==目錄(slottedclass_non_meta)
>>> True
什麼是完整的錯誤?這看起來被截斷了。 – Carcigenicate
你的對象,而不是「slotted_class」做「slottedClass」大寫C那麼試試這個「slotted_class.slotted_attribute1」 –
我道歉,這僅僅是一個佔位符,我寫了這個問題本身。然而,錯誤真的很簡單。我將增加整個回溯 – SerialDev