คำถามติดแท็ก metaclass


22
สร้างซิงเกิลตันใน Python
คำถามนี้ไม่ได้มีไว้สำหรับการอภิปรายว่ารูปแบบการออกแบบซิงเกิลตันนั้นน่าพึงพอใจหรือไม่นั้นเป็นรูปแบบการต่อต้านหรือสงครามทางศาสนาใด ๆ แต่เพื่อพูดคุยว่ารูปแบบการใช้งานที่ดีที่สุดในไพ ธ อนนั้นเป็นไปได้อย่างไร ในกรณีนี้ฉันกำหนด 'pythonic ส่วนใหญ่จะหมายถึงว่ามันเป็นไปตามหลักการน้อยมหัศจรรย์' ฉันมีหลายชั้นเรียนซึ่งจะกลายเป็น singletons (กรณีใช้งานของฉันสำหรับคนตัดไม้ แต่นี่ไม่ใช่สิ่งสำคัญ) ฉันไม่ต้องการที่จะถ่วงเวลาเรียนหลายครั้งพร้อมกับเพิ่มชัยชนะเมื่อฉันสามารถสืบทอดหรือตกแต่ง วิธีการที่ดีที่สุด: วิธีที่ 1: มัณฑนากร def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass ข้อดี มัณฑนากรเป็นสารเติมแต่งในลักษณะที่มักใช้งานง่ายกว่าการสืบทอดหลายแบบ จุดด้อย ในขณะที่วัตถุที่สร้างขึ้นโดยใช้ MyClass () จะเป็นวัตถุซิงเกิลจริง MyClass …


6
คลาส Meta ของ Django ทำงานอย่างไร?
ฉันใช้ Django class Metaซึ่งจะช่วยให้คนที่จะเพิ่มพารามิเตอร์พิเศษในชั้นเรียนโดยใช้ class FooModel(models.Model): ... class Meta: ... สิ่งเดียวที่ฉันพบในเอกสารของ Python คือ: class FooMetaClass(type): ... class FooClass: __metaclass__ = FooMetaClass อย่างไรก็ตามฉันไม่คิดว่านี่เป็นสิ่งเดียวกัน
191 python  django  metaclass 

19
กรณีการใช้งาน (คอนกรีต) อะไรบ้างสำหรับแว่นตา?
ฉันมีเพื่อนคนหนึ่งที่ชอบใช้เมตาแว่นตาและเสนอวิธีแก้ปัญหาให้พวกเขาเป็นประจำ ฉันคิดว่าคุณแทบไม่จำเป็นต้องใช้เมตาแว่นตาเลย ทำไม? เพราะฉันคิดว่าถ้าคุณทำอะไรแบบนั้นกับชั้นเรียนคุณน่าจะทำกับวัตถุ และการออกแบบ / refactor ขนาดเล็กเป็นไปตามลำดับ ความสามารถในการใช้ metaclasses ทำให้ผู้คนจำนวนมากในหลาย ๆ แห่งใช้คลาสเป็นวัตถุอัตราสองซึ่งดูเหมือนจะเป็นหายนะสำหรับฉัน การเขียนโปรแกรมจะถูกแทนที่ด้วย meta-programming หรือไม่? การเพิ่มนักตกแต่งชั้นเรียนทำให้เป็นที่ยอมรับมากยิ่งขึ้น ดังนั้นฉันอยากทราบกรณีการใช้งานที่ถูกต้อง (ที่เป็นรูปธรรม) ของคุณสำหรับ metaclasses ใน Python หรือเพื่อให้รู้แจ้งว่าทำไมคลาสการกลายพันธุ์จึงดีกว่าการกลายพันธุ์วัตถุในบางครั้ง ฉันจะเริ่ม: บางครั้งเมื่อใช้ไลบรารีของบุคคลที่สามจะมีประโยชน์ที่จะสามารถเปลี่ยนคลาสด้วยวิธีใดวิธีหนึ่ง (นี่เป็นกรณีเดียวที่ฉันคิดได้และมันไม่เป็นรูปธรรม)
118 python  metaclass 

4
อะไรคือความแตกต่างระหว่าง“ classmethod” และวิธี metaclass?
ใน Python ฉันสามารถสร้างวิธีการเรียนโดยใช้@classmethoddecorator: >>> class C: ... @classmethod ... def f(cls): ... print(f'f called with cls={cls}') ... >>> C.f() f called with cls=<class '__main__.C'> อีกวิธีหนึ่งฉันสามารถใช้วิธีปกติ (ตัวอย่าง) ใน metaclass: >>> class M(type): ... def f(cls): ... print(f'f called with cls={cls}') ... >>> class C(metaclass=M): ... pass ... >>> C.f() f called …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.