ما هي قاعدة لغة Python التي تسمح بوجود واصف أولا؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

لقد صدمت في الليلة الماضية الماضية وما زلت في حيرة لتفسيرها:

class Foo(object):
    @property
    def dave(self):
        vars(self)['dave'] = 1
        return 2

f = Foo()
print f.dave
print f.dave

تشغيل هذا الرمز ينتج:

2
2

السؤال هو السبب؟ فهمي للوصول السمة هو أنه يتم فحص قاموس المثيل قبل القاموس الطبقي، ومع ذلك القاموس في أي قواعد، ولكن كما هو موضح أعلاه - لا يبدو أن قاموس المثيل قد يتم التحقق قبل العثور على واصف في قاموس الطبقة.

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

المحلول

فهمي للوصول السمة هو أنه يتم فحص قاموس المثيل قبل القاموس الصفي، والقاموس في أي قواعد

واصفات البيانات هي استثناء:

على سبيل المثال، يرتبط الروابط، فإن الأسبقية من الاحتجاج واصف يعتمد على أساليب واصفها التي يتم تعريفها. عادة، تحدد واصفات البيانات على حد سواء __get__() و __set__(), ، في حين أن واصفات غير البيانات لديها فقط __get__() طريقة. واصفات البيانات دائما تجاوز إعادة تعريف في قاموس مثيل. في المقابل، يمكن تجاوز واصفات غير البيانات بواسطة مثيلات.

http://docs.python.org/Reference/datamodel.html#invoking-descriptors.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top