python:sth like parametrized inheritance

时间:2009-10-27 09:16:44

标签: python inheritance

我希望我的课程XY有一个调用函数f(x)的方法func(x, y),以便X.f(x)始终调用func(x, 1)Y.f(x)始终致电func(x, 2)

class X(object):
    def f(self, x):
        func(x, 1)

class Y(object):
    def f(self, x):
        func(x, 2)

但我想将f放在BX的公共基类Y中。当我从X继承YB时,如何传递该值(1或2)?我可以这样(C ++像伪代码):

class B(object)<y>:  # y is sth like inheritance parameter
    def f(self, x):
        func(x, y)

class X(B<1>):
    pass

class Y(B<2>):
    pass

Python在这些任务中使用了哪些技术?

2 个答案:

答案 0 :(得分:6)

Python比你给予信任更灵活。

我想你想要这样的东西:

class B(object):
    def f(self,x):
        func(x, self.param)

class X(B):
    param=1

class Y(B):
    param=2

NB

  • 注意方法f有自己作为 第一个参数。
  • param = lines是类变量。

答案 1 :(得分:1)

如果你只想在几个类中添加一个公共函数(而不是使用继承),你可以使用类装饰器(Python 2.6及更高版本)。

def addF(y):
    def f(self, x):
        return "Hello", x, "and", y

    def decorate(cls):
        cls.f = f
        return cls

    return decorate


@addF(1)
class X(object):
    pass

@addF(2)
class Y(object):
    pass

print X().f("X")
print Y().f("Y")

>>> 
Hello X and 1
Hello Y and 2