1

好吧,我想我的问题之前已经被问过,但我真的不知道使用哪些术语来搜索它,所以如果这是重复的,请道歉。

我的问题是如何从创建当前类实例的类中调用方法?例如我们有:

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作为参数传递Secondself.second = Second(self)但我不确定这是否是正确的方法。我还发现可以通过创建Second的子类来实现First,但我仍然不确定这是否是正确的方法。

你能帮我解答吗?谢谢

4

1 回答 1

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

以这种方式相互了解并使用彼此属性的对象,我担心,很可能会违反德米特法则或使彼此难以区分。并且区分它们对于编写“好”类非常重要。所以要小心处理!

其他解决方案:传递文本:

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

这也很OK。我比第一个解决方案更喜欢它。但是当有更多的参数出现时, 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

我认为这对于同步文本来说也是一个很好的解决方案。但我想不出一个我真正需要它的例子。

于 2013-03-31T20:19:11.553 回答