2016-09-01 77 views
0

我有一個基類,我想一起派生和實例化。我能做到這一點在Java中,如:如何在Python中一次定義和實例化派生類?

BaseClass derivedClassInstance = new BaseClass() { 
    @override 
    void someBaseClassMethod() { // my statements} 
}; 

在Python中我可以得到與和實例化一個基類,如:

class DerivedClass(BaseClass): 
    def some_base_class_method(): 
     # my statements 

derived_class_instance = DerivedClass() 

我需要與小的改動某些對象的子類的單個實例。單獨派生和分配看起來好像過度。

是否有類似Java的單線程如何在運行中派生和實例化類?還是有更簡潔的方式來做我在Python中做的事情?

+3

考慮使用除繼承之外的其他工具。也許無論你使用方法覆蓋來實現什麼行爲,你都可以通過回調或其他方式傳遞給父項。 – user2357112

+0

如果BaseClass是一個模板方法,您將無法傳遞迴調或lambda。 – vz0

+0

@ user2357112感謝您的建議。我不熟悉Python中的回調。我會研究一下。 vz0的回答是足夠的威懾力。 – hazrmard

回答

2

一般來說,你不會看到這種類型的代碼,因爲很難閱讀和理解。我真的建議你找一些替代品,並避免接下來的事情。話雖如此,你可以在一行中創建一個類和一個實例,如下所示:

>>> class BaseClass(object): 
...  def f1(self, x): 
...    return 2 
...  def f2(self, y): 
...    return self.f1(y) + y 
... 
>>> 
>>> W = BaseClass() 
>>> W.f2(2) 
4 
>>> X = type('DerivedClass', (BaseClass,), {'f1': (lambda self, x: (x + x))})() 
>>> X.f2(2) 
6 
+0

o_0考慮一下我的警告。 – hazrmard

0

我想你正在尋找元類編程。

class Base(object): 
    def test(self): 
     print 'hit' 
a =type('Derived',(Base,),{})() 
a.test() 
hit 
相關問題