لماذا فتيل عدم استخدام فئة الموردة في file_class

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

  •  08-07-2019
  •  | 
  •  

سؤال

لدي الثعبان فتيل المشروع بناء على Xmp سبيل المثال في الصمامات الوثائق.ولقد تضمنت قطعة صغيرة من قانون لإظهار كيف يعمل هذا.لسبب get_file لا تحصل يسمى الطبقة يحصل على خلق, ولكن بدلا من الصمامات الدعوة .قراءة() على فئة من get_file (file_class) فتيل تحافظ على الدعوة Dstorage.قراءة() التي الهزائم الغرض في تحريك قراءة وظيفة من تلك الفئة.

class Dstorage(Fuse, Distributor):
    def get_file(self, server, path, flags, *mode):
        pass
        # This does some work and passes back an instance of
        # a class very similar to XmpFile

    def main(self, *a, **kw):
        self.file_class = self.get_file
        return Fuse.main(self, *a, **kw)

لدي مدونة مستضافة على انطلاق, يمكنك تحميل البرنامج مع هذا الأمر.
bzr co https://code.launchpad.net/~asa-ايرز/+غير المرغوب فيه/dstorage
bzr فرع lp:~asa-ايرز/dstorage/شنطة

الحل:
أنا استخدم بروكسي فئة فرعية واحدة أنا في حاجة و في منشئ أحصل على سبيل المثال من الصف الأول بحاجة والكتابة كل من وكيل أساليب ببساطة استدعاء أساليب المثال.

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

المحلول

تبحث في قانون فتيل الطبقة (التي هي متاهة من مقاطع قليلا ملتوي إيجاد طريقة وكلاء) ، أرى هذا الشيء (وهو الإغلاق المستخدمة لإنشاء اضع داخل Fuse.MethodProxy._add_class_type, خط 865):

        def setter(self, xcls):

            setattr(self, type + '_class', xcls)

            for m in inits:
                self.mdic[m] = xcls

            for m in proxied:
                if hasattr(xcls, m):
                    self.mdic[m] = self.proxyclass(m)

عندما تفعل self.file_class = self.get_file, هذا يحصل مع ما يسمى self.get_file, وهو لا بد الأسلوب.حلقة أكثر من بروكسي سمات يتوقع أن تكون قادرة على الحصول على سمات من الدرجة تعيين, لوضعها في mdic وكيل القاموس بعد التفاف عليها ، ولكن لم تكن هناك, لأنه لا بد الأسلوب بدلا من فئة.لأنه لا يمكن العثور عليها ، فإنه يعود إلى دعوتهم على Dstorage.

لذا, قصة قصيرة طويلة, لا يمكنك استخدام للاستدعاء الذي يعود مثيل (نوع من الدرجة الزائفة) بدلا من فئة هنا لأن الصمامات هو introspecting الكائن الذي قمت بتعيين للعثور على أساليب ينبغي أن الدعوة.

تحتاج إلى تعيين فئة إلى file_class - إذا كنت تحتاج إلى الرجوع إلى الأصل سبيل المثال ، يمكنك استخدام فئة متداخلة خدعة أنها تظهر في مجلد "المستندات".

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