Questions tagged «metaclass»


22
在Python中创建单例
这个问题不是为了讨论是否需要单例设计模式,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式。在这种情况下,我将“最pythonic”定义为表示它遵循“最少惊讶的原理”。 我有多个将成为单例的类(我的用例用于记录器,但这并不重要)。当我可以简单地继承或修饰时,我不希望增加gumph来使几个类杂乱无章。 最佳方法: 方法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本身是一个函数,而不是类,因此您不能从中调用类方法。也就m = MyClass(); n = MyClass(); o = type(n)();这样m == n && m != o && n != …


6
Django的Meta类如何工作?
我正在使用Django,它允许人们使用来向类添加额外的参数class Meta。 class FooModel(models.Model): ... class Meta: ... 我在Python文档中发现的唯一东西是: class FooMetaClass(type): ... class FooClass: __metaclass__ = FooMetaClass 但是,我认为这不是一回事。
189 python  django  metaclass 

19
元类有哪些(具体的)用例?
我有一个喜欢使用元类的朋友,并定期提供它们作为解决方案。 我认为您几乎不需要使用元类。为什么?因为我认为如果您正在对一个类进行类似的操作,那么您可能应该对一个对象进行此操作。并进行了少量的重新设计/重构。 能够使用元类已经使很多地方的许多人将类用作某种二流对象,这对我来说似乎是灾难性的。用元编程代替编程吗?不幸的是,添加了类装饰器使它变得更加可以接受。 所以,我很想知道您在Python中对元类的有效(具体)用例。还是要启发一下为什么有时候变异类比变异对象更好。 我将开始: 有时在使用第三方库时,能够以某种方式对类进行更改很有用。 (这是我能想到的唯一情况,并不具体)
117 python  metaclass 

4
类方法和元类方法之间有什么区别?
在Python中,我可以使用 @classmethod装饰器: >>> class C: ... @classmethod ... def f(cls): ... print(f'f called with cls={cls}') ... >>> C.f() f called with cls=<class '__main__.C'> 另外,我可以在元类上使用常规(实例)方法: >>> class M(type): ... def f(cls): ... print(f'f called with cls={cls}') ... >>> class C(metaclass=M): ... pass ... >>> C.f() f called with cls=<class '__main__.C'> 如输出所示 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.