在Python中将外部函数指定为staticmethod

在Python中将外部函数指定为staticmethod,python,python-3.x,Python,Python 3.x,我有一个模块,它包含一系列生成xml的函数 在另一个模块中,我正在构造一个类,我想将其中一个函数分配给一个类变量 问题是,函数充当类方法,当我从另一个类方法调用它时,它将self作为第一个参数传递 我选择了一个好的设计方法吗?如何避免将self传递给函数?(@staticmethod decorator before generate=gen.generate不工作) 如果可能的话,我希望避免用generate函数生成一个类 谢谢 发电机.py def generate(id, date):

我有一个模块,它包含一系列生成xml的函数

在另一个模块中,我正在构造一个类,我想将其中一个函数分配给一个类变量

问题是,函数充当类方法,当我从另一个类方法调用它时,它将self作为第一个参数传递

我选择了一个好的设计方法吗?如何避免将self传递给函数?(@staticmethod decorator before generate=gen.generate不工作)

如果可能的话,我希望避免用generate函数生成一个类

谢谢

发电机.py

def generate(id, date):
    pass

def generate_another():
    pass
main.py

import generators as gen

class Client():
    generate = gen.generate

    def get_result(self, *args, **qwargs):
        request = self.generate(id, date)



你必须明白:

@decorator
def some_func():
    pass
只是语法上的糖

def some_func():
    pass

some_func = decorator(some_func)
因此,在这种情况下,您只需要:

import generators as gen

class Client:
    generate = staticmethod(gen.generate)

    def get_result(self, *args, **qwargs):
        request = self.generate(id, date)

至于这是否是一个好的设计决策,这可能是一个基于观点的问题。就我个人而言,我倾向于避免使用
staticmethod
。与只需在
内调用
gen.generate
获取结果
相比,这种设计有什么优势?

为什么您甚至需要
self.generate
?为什么不直接将其称为
gen.generate()
。为什么它应该是一个静态方法而不是一个函数?这很像@jordanm-一个子类可以定义一个不同的
generate
,甚至可以定义一个对象方法
generate
,该方法使用对象上的状态,并且
get\u result
仍然可以工作。这里并没有说这是目的,但这是一种合理的模式。@t德莱尼个人认为,如果是这样,我更愿意在外部提供它作为参数,因此
client=client(gen.generate)
。那么就不需要staticmethod了decorator@juanpa.arrivillaga-是的,这是一个好办法。但我已经编写了工厂函数,它们使用外部配置完成类似的工作。在我的例子中,这是一个测试套件,目标是使测试用例尽可能通用。@tdelaney是的,我的目的是子类化,用不同的生成器(和其他行为)创建不同的客户端,并共享get_结果方法。你是怎么做到的?与juanpa.arrivillaga的回答类似?目的是创建一组具有不同生成器的客户端。所以对于每个子类,我想以一种统一的方式分配它自己的生成器函数。谢谢你的回答!