Python:使用外部类的属性

时间:2016-03-31 18:30:31

标签: python inner-classes

我有一些看起来像这样的代码:

class Log(object):
    @property
    def log(self):
        return self.log

class ExampleClass2(ExampleClass, Log):
    class ExampleClass3(object):
        @property
        def log_value(self):
            self.log.info('Hi!')

但是我收到了错误,

'ExampleClass3' object has not attribute 'log'

我猜我需要向DEF添加__init__()方法,我尝试过使用

super(ExampleClass2.ExampleClass3, self).__init__()

但我仍然无法访问log。有什么建议?

1 个答案:

答案 0 :(得分:0)

我相信要获得您想要的行为,您需要在创建ExampleClass2的实例时传递ExampleClass3的实例。

class OuterClass:
    def __init__(self, value):
        self.value = value

    class InnerClass:
        def __init__(self, instance):
            self.instance = instance

        def inner_print_value(self):
            print self.instance.value

    def outer_print_value(self):
        printer = OuterClass.InnerClass(self)
        printer.inner_print_value()

OuterClass('Hi').outer_print_value() # 'Hi'

正如评论中所指出的,这种结构很少有理由。在InnerClass的定义之外创建OuterClass会更容易。

class OuterClass:
    def __init__(self, value):
        self.value = value

    def outer_print_value(self):
        printer = InnerClass(self)
        printer.inner_print_value()

class InnerClass:
    def __init__(self, instance):
        self.instance = instance

    def inner_print_value(self):
        print self.instance.value

在创建内部类时,似乎期望增加self的值,但事实并非如此。为此,您需要使用继承,并且不需要嵌套类。