在Python中分组静态函数的合适方式
在Python中,如何合理地把静态函数分组呢?
考虑的因素:
- 同一组的函数之间不需要共享状态或任何信息。
- 有几个组,每组包含3个函数,所有函数都有一个共同的“接口”。
看起来解决方案是为每个组创建一个类。这样做的好处是可以通过继承一个抽象类来轻松提供接口。而且,这样比为每个组创建单独的模块要整洁得多。不过,实例化这些类似乎没有意义,因为它们实际上应该是静态类。
有没有好的设计方法呢?我应该在每个类中的每个方法前加上@staticmethod,还是有更优雅的做法(比如把整个类声明为静态)?
编辑:由于这个问题被标记为“基于观点”,我想更具体地问:有没有办法把整个类声明为静态?
1 个回答
2
有没有办法把整个类声明为静态的?
你可以使用一个叫做元类的东西来实现这个功能。这样你就可以在类创建的时候拦截它,并把所有的方法替换成静态方法。
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")
[...] 有没有更优雅的做法呢 [...] ?
至于这样做是否更优雅,我留给你自己判断。不过,一般来说,如果可以避免的话,使用元类是不太推荐的。因为它们会让代码变得更加复杂和难以理解。而且,很多程序员对元类并不是很熟悉。所以,你的代码会变得更难维护。