لماذا لا يمكنني التعيين إلى سمات غير معلنة لمثيل الكائن () ولكن يمكنني مع فئات مخصصة؟

StackOverflow https://stackoverflow.com/questions/3654669

  •  01-10-2019
  •  | 
  •  

سؤال

في الأساس أريد أن أعرف لماذا يعمل هذا:

class MyClass:
  pass

myObj = MyClass()
myObj.foo = 'a'

لكن هذا يعيد سمة:

myObj = object()
myObj.foo = 'a'

كيف يمكنني معرفة الفصول الدراسية التي يمكنني استخدامها مع سمات غير محددة وأيها لا أستطيع؟

شكرًا.

هل كانت مفيدة؟

المحلول

يمكنك تعيين سمات على أي فصل مع __dict__, ، لأن هذا هو المكان الذي يتم تخزينه. object مثيلات (غريبة) وأي فئة تحددها __slots__ لا املك واحدة:

>>> class Foo(object): pass
...
>>> foo = Foo()
>>> hasattr(foo, "__dict__")
True
>>> foo.bar = "baz"
>>>
>>> class Spam(object):
...     __slots__ = tuple()
...
>>> spam = Spam()
>>> hasattr(spam, "__dict__")
False
>>> spam.ham = "eggs"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Spam' object has no attribute 'ham'
>>>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top