我有一些看起来像这样的代码:
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
。有什么建议?
答案 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
的值,但事实并非如此。为此,您需要使用继承,并且不需要嵌套类。