2016-11-13 72 views
0

我有嵌套類,因爲它們緊密相關。python如何讓內部類成爲外部類的類型

現在我想有以下類型的代碼

class one(Some-other-type): 
    ... 
    // More functions here 

    class two(one): 
     // Some more functions here. 

內部類「二」的類型應該是「一」,但如果我把我得到一個錯誤。 另一種方法是不讓它嵌套像下面

class one(Some-other-type): 
    ... 
    // More functions here 

class two(one): 
    // Some more functions here. 

但後來我不想當模塊導入的類「兩」來訪問。 我並不真正關心「one」提供的功能,但爲了清晰的代碼,它需要在它之下。

有什麼想法?

+1

[python中從內部類訪問外部類(的可能的複製http://stackoverflow.com/questions/2024566/access-outer-class- python) –

+2

「但是當我導入模塊時,我不想讓類」two「可以訪問。」 Python不會打擾像'private'這樣的訪問修飾符。只需在'class _two'前加上一個下劃線來表示它是私人的。因爲在另一種情況下,總是可以通過one.two來訪問。 – Evert

+0

@Evert是啊我猜這就是要走的路 – Anup

回答

0

在構建類時,不能引用該類。然而,你可以在自己的方法中引用一個類,因爲方法體在構造完成之後纔會被評估。

class one(object): 
    @staticmethod 
    def get_two(): 
     class two(one): 
      pass 
     return two() 
    def f(self): 
     print("I am %s" % type(self).__name__) 

two繼承fone

>>> obj = one.get_two() 
>>> obj.f() 
"I am two" 
+0

這可能是一個重大的缺點,你從'get_two'獲得的每個實例都將是一個不同'two'類的實例。也就是說,這些類將具有相同的名稱(和相同的方法等),但它們不會是相同的類。 'type(one.get_two())!= type(one.get_two())' – Blckknght

+0

@Blckknght你說得對。 get_two()可以返回類,如果重要,你可以僅僅從那個類類型實例化兩個對象。 –

相關問題