Python,如何将非类方法保持为非类方法?

2024-09-29 23:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一组类,这些类调用在不同模块中定义的函数。为了知道他们必须调用哪个函数,函数被存储为类的一个变量(或者至少我试过了)。但是,当我尝试调用它时,它会自动假定函数是一个类方法,并将“self”作为参数传递,这在逻辑上会导致错误,因为函数接收的参数太多。你知道如何避免函数变成类方法吗。在

代码应该是:

# Module A
def func1(a):
    print a
def func2(a):
    print a,a

# Module B
from A import *
class Parent:
    def func():
        self.sonFunc("Hiya!")
class Son1:
    sonFunc = func1
class Son2:
    sonFunc = func2

so = Son1()
s.func()
# Should print "Hiya!"
s = Son2()
s.func()
# Should print "Hiya! Hiya!"

谢谢


Tags: 方法函数selfdefclassmodulefuncprint
1条回答
网友
1楼 · 发布于 2024-09-29 23:32:16

你所做的有点不标准/奇怪,但这应该是有效的:

class Son_1(object):

    son_func = staticmethod(func_1)

class Son_2(object):

    son_func = staticmethod(func_2)

通常,staticmethod用作修饰符,但由于decorator只是语法上的糖,所以也可以这样使用它们。在

一种可以说更干净但也更先进的方法是使用metaclass

^{pr2}$

使用此表单,您还可以直接在类中定义函数(尽管这样一来,阅读此代码的人会更加困惑):

class Son3(object):

    __metaclass__ = HasSonMeta

    def __son_func__():

        pass

虽然可能存在一个非常狭窄/模糊的场景,在这种情况下,这是一个最佳的实现,但最好将函数放在基类中,然后根据需要在子类中引用(或重写)它们。在

相关问题 更多 >

    热门问题