好吧,我想我之前已经问过我的问题了,但是我真的不知道用哪个词来搜索它,所以如果这是重复的话就道歉。
我的问题是如何从创建当前类实例的类中调用方法?例如,我们有:
class First:
def __init__(self):
self.text = "This is a text in First class"
self.second = Second()
class Second:
def __init__(self):
print "How to show self.text from First?"
我现在这样做的方法是在发起self
课时First
Second
作为参数传递self.second = Second(self)
Second
但我不是确定这是否正确。另外我发现这可以通过使First
成为{{1}}的子类来实现,但我仍然不确定这是否是正确的方法。
答案 0 :(得分:3)
这是你可以做到的:
class First:
def __init__(self):
self.text = "This is a text in First class"
self.second = Second(self)
class Second:
def __init__(self, first):
self.first = first
print "How to show self.text from First?"
print self.first.text
我担心,以这种方式相互了解并使用彼此属性的对象很可能违反law of demeter或难以区分对方。 区分它们对于编写“好”课程非常重要。 所以要小心处理!
其他解决方案:传递文字:
class First:
def __init__(self):
self.text = "This is a text in First class"
self.second = Second(self.text)
class Second:
def __init__(self, text):
self.text = text
print "How to show self.text from First?"
print self.text
这也很好。 我想要的不仅仅是第一个解决方案。 但是当有更多的参数要来时,text1,text2,text3,...比这可能是一个新的对象。
class First(object):
@property
def text(self):
"get text from self.second"
return self.second.text
def __init__(self):
self.second = Second("This is a text in First class")
print self.text
class Second:
def __init__(self, text):
self.text = text
print "How to show self.text from First?"
print self.text
我认为这也是同步文本的一个很好的解决方案。 但我想不出一个我真正需要它的例子。