在python中对静态函数进行分组的适当方法

时间:2014-06-27 16:40:14

标签: python oop static

在Python中将静态函数组合在一起的适当方法是什么?

注意事项:

  1. 同一组中的功能不需要共享状态或任何信息。
  2. 有几个小组,每个小组包含3个功能,所有小组都共享一个共同的“界面”。
  3. 似乎解决方案是为每个组创建一个类。这具有通过子类化抽象类来容易地提供接口的优点。此外,这对于为组创建单独的模块而言不那么混乱。但是,实例化这些类是没有意义的 - 它们应该是静态类。

    任何想法什么是最好的设计方法?我应该为每个类中的每个方法添加@staticmethod还是有一种更优雅的方法(例如声明整个类是静态的)?

    编辑:由于这个问题被标记为“基于意见”,我会更具体地问:无论如何都要声明整个类是静态的吗?

1 个答案:

答案 0 :(得分:2)

  

无论如何要将整个类声明为静态吗?

您可以使用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")
  

[...]是否有一种更优雅的方式[...]?

我会向你提出这个问题,这是否更优雅。但是,如果可以避免,则通常不鼓励使用元类。它们往往使代码库更加复杂和混乱。此外,许多程序员对它们并不十分熟悉。因此,您的代码将变得更难维护。