【问题标题】:Python: how to get a parent instance from a child instancePython:如何从子实例中获取父实例
【发布时间】:2017-07-30 11:19:38
【问题描述】:

如果我有两个子类都继承自同一个父类

    class Parent(object):
        def __init__(self):
            self.name = 'parent'
            self.position = 0

    class FirstChild(Parent):
        def __init__(self):
            self.speed = 1

    class SecondChild(Parent):
        def __init__(self):
            self.final = 100

        def remaining_distance(self):
            print('Remaining distance is %i.' %(self.final - self.position)

现在我从 FirstChild 定义一个实例。

    Child1 = FirstChild()

我想在 Child1 上使用 SecondChild 中的方法。我该怎么做? 我知道

    SecondChild.remaining_distance(Child1) 

会给我一条错误消息。有没有代码可以无误地达到预期的效果?

谢谢你:)

【问题讨论】:

  • 这个不行,FirstChild 和 SecondChild 不共享任何东西。能不能把remaining_distance函数放到Parent里面?
  • 你不能,Child1 不是SecondChild 的实例。
  • remaining_distance 显然应该是ParentFirstChild 的方法。

标签: python python-2.7 inheritance multiple-inheritance


【解决方案1】:

当你创建一个子类的实例也是父类的一个实例 例如在文档中:

    class Foo(object):
        def __init__(self):
            print "foo init"

    class Bar(object):
        def __init__(self):
            print "bar init"

    class FooBar(Foo, Bar):
        def __init__(self):
            print "foobar init"
            super(FooBar, self).__init__()

    a = FooBar()

输出:

    foobar init
    foo init

但这并不意味着 Bar 类没有被继承。 final FooBar 类的实例也是 Bar 类和 Foo 类的实例。

print isinstance(a,FooBar)
print isinstance(a,Foo)  
print isinstance(a,Bar) 

输出

True
True
True

在您的示例中,第一个和第二个孩子都具有相同的父类,但它们只能共享父类变量或方法,因为它们都共享父类范围,两个孩子不能共享自己的方法或变量,因为它们是不分享他们的范围

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    相关资源
    最近更新 更多