python:类似参数化继承的东西
我想让我的两个类 X
和 Y
都有一个方法 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
方法放在一个共同的基类 B
中,让 X
和 Y
都可以继承。那我该怎么在从 B
继承 X
和 Y
的时候,把这个值(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 个回答
6
Python比你想象的要灵活得多。
我觉得你可能想要的是这样的:
class B(object):
def f(self,x):
func(x, self.param)
class X(B):
param=1
class Y(B):
param=2
注意
- 注意方法f的第一个参数是self。
- param=后面的内容是类变量。
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