在
Python中将静态函数组合在一起的适当方法是什么?
注意事项:
>同一组中的功能不需要共享状态或任何信息.
>有几个组,每个组包含3个功能,共享一个共同的“接口”.
似乎解决方案是为每个组创建一个类.这具有通过子类化抽象类来容易地提供接口的优点.此外,这对于为组创建单独的模块而言不那么混乱.但是,实例化这些类是没有意义的 – 它们应该是静态类.
任何想法什么是最好的设计方法?我应该为每个类中的每个方法添加@staticmethod还是有一种更优雅的方法(例如声明整个类是静态的)?
编辑:由于这个问题被标记为“基于意见”,我将更具体地问:无论如何都要声明整个类是静态的吗?
最佳答案
Is there anyway to declare a whole class static?
您可以使用metaclass来实现此目的.这样您就可以拦截类创建并通过静态方法替换所有方法.
from types import FunctionType
class StaticMetaClass(type):
def __new__(cls, name, bases, dct):
def transform(f):
if type(f) == FunctionType:
return staticmethod(f)
return f
newdct = dict((k, transform(v)) for k, v in dct.iteritems())
return type.__new__(cls, name, bases, newdct)
class StaticBase(object):
__metaclass__ = StaticMetaClass
class Static(StaticBase):
def func1():
print "func1"
def func2(a, b):
print "func2", a, b
Static.func1()
Static.func2(1, "World")
[…] is there a more elegant way of doing it […] ?
我会向你提出这个问题,不管这是否更优雅.但是,如果可以避免,则通常不鼓励使用元类.它们往往使代码库更加复杂和混乱.此外,许多程序员对它们并不十分熟悉.因此,您的代码将变得更难维护.