我希望我的课程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
中。当我从X
继承Y
和B
时,如何传递该值(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在这些任务中使用了哪些技术?
答案 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
答案 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