2009-10-27 78 views
1

我想我的課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) 

但我希望把fXY的共同基類B中。當我從B繼承XY時,如何通過該值(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在這些任務中使用了哪些技術?

+1

「sth」是什麼意思? – 2009-10-27 10:20:56

+0

@S。洛特:也許這個......? http://stackoverflow.com/users/56338/sth – 2009-10-27 10:54:46

回答

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 
+0

似乎是解決方案!謝謝! – netimen 2009-10-27 11:46:38

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 =行是類變量。