سؤال

لماذا لا يمكنني إعادة تعريف __and__ المشغل أو العامل؟

class Cut(object):
      def __init__(self, cut):
         self.cut = cut
      def __and__(self, other):
         return Cut("(" + self.cut + ") && (" + other.cut + ")")

a = Cut("a>0") 
b = Cut("b>0")
c = a and b
print c.cut()

أريد (a>0) && (b>0), ، لكنني حصلت على ب ، هذا السلوك المعتاد لـ and

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

المحلول

__and__ هو الثنائي (bitwise) & المشغل ، وليس المنطقي and المشغل أو العامل.

بسبب ال and المشغل هو مشغل دائرة قصيرة ، لا يمكن تنفيذه كدالة. هذا هو ، إذا كانت الوسيطة الأولى خاطئة ، فإن الوسيطة الثانية لم يتم تقييمها على الإطلاق. إذا حاولت تنفيذ ذلك كدالة ، فيجب تقييم كلتا الوسيطتين قبل التذرع بالوظيفة.

نصائح أخرى

لأنه لا يمكنك إعادة تعريف كلمة رئيسية (هذا ما and هو) في بيثون. __add__ يستخدم لفعل شيء آخر:

يتم استدعاء هذه الطرق لتنفيذ العمليات الحسابية الثنائية (...&...

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