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

标签 python oop static

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

注意事项:

  1. 同一组中的函数不需要共享状态或任何信息。
  2. 有几个组,每个组包含 3 个功能,所有功能共享一个公共(public)“界面”。

似乎解决方案是为每个组创建一个类。这具有通过子类化抽象类轻松提供接口(interface)的优点。这也没有为组创建单独的模块那么困惑。然而,实例化这些类是没有意义的——它们实际上应该是静态类。

有什么想法是设计这个的最佳方法吗?我应该向每个类中的每个方法添加 @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 [...] ?

我会把这个问题留给你,这是否更优雅。但是,如果可以避免,通常不鼓励使用元类。它们往往会使代码库更加复杂和困惑。还有,很多程序员对它们不是很熟悉。因此,您的代码将变得更难维护。

关于python - 在 python 中对静态函数进行分组的适当方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456844/

相关文章:

Swift 从函数中获取值

c++ - MSVC 和 FreeGlut 编译器错误

python - 即使安装后也无法在ubuntu中的python-2.7.12中导入z3

python - 使用python永久添加的linux环境变量

python - Print 和 file.write 给出不同的输出,Python

javascript - 简单的 JavaScript OOP 类

c - 在 C 程序的 main() 函数中是否有充分的理由将变量声明为静态?

python - elasticsearch python 查询 - 按字段分组然后计数

C++重载运算符的工作原理

java - 如何减少这段代码中的 if else 语句?