2016-11-13 58 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()可以返回类,如果重要,你可以仅仅从那个类类型实例化两个对象。 –

相关问题