لماذا لا يمكنني إضافة سمات مباشرة إلى أي كائن بيثون؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

لدي هذا الرمز:

>>> class G:
...   def __init__(self):
...     self.x = 20
...
>>> gg = G()
>>> gg.x
20
>>> gg.y = 2000

وهذا الكود :

>>> from datetime import datetime
>>> my_obj = datetime.now()
>>> my_obj.interesting = 1
*** AttributeError: 'datetime.datetime' object has no attribute 'interesting'

من معرفتي بايثون، أود أن أقول ذلك datetime يتجاوز setattr/getattr, ولكنني لست متأكدا.هل يمكنك إلقاء بعض الضوء هنا؟

يحرر:أنا لست مهتما على وجه التحديد datetime.كنت أتساءل عن الأشياء بشكل عام.

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

المحلول

أعتقد أن تنفيذ استخدامات التاريخ والوقت __الفتحات__ لأداء أفضل.

عند الاستخدام __slots__, ، يحتفظ المترجم بالتخزين للسمات المذكورة فقط، ولا شيء آخر.وهذا يوفر أداءً أفضل ويستخدم مساحة تخزين أقل، ولكنه يعني أيضًا أنه لا يمكنك إضافة سمات جديدة حسب رغبتك.

اقرأ المزيد هنا: http://docs.python.org/reference/datamodel.html

نصائح أخرى

وعلى الرغم من أن المسألة قد تم الرد عليها؛ إذا كان أي شخص مهتم في الحل، وهنا مثال -

mydate = datetime.date(2013, 3, 26)
mydate.special = 'Some special date annotation'  # doesn't work
...
class CustomDate(datetime.date):
    pass
mydate = datetime.date(2013, 3, 26)
mydate = CustomDate(mydate.year, mydate.month, mydate.day)
mydate.special = 'Some special date annotation'  # works
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top