我可以从父类调用子类来创建对象

时间:2016-03-04 00:06:52

标签: python class object inheritance subclass

例如:

class parent(self):
    def __init__(self, i):
        self.i = i
    def something(self, value):
        a = child(value)
        return a

class child(parent):
    def something_that_is_not_init(self):
        return self.i

子类从父类继承init。所以我的问题是,在我的父类中,我可以创建子对象的实例,使用并返回吗?

我会按如下方式执行:

a = parent(2)
b = a.something(3)

b.something_that_is_not_init()
3

编辑了一下问题,更新了代码部分,因为问题不明确。

2 个答案:

答案 0 :(得分:0)

是的,它有效,但我不推荐它。它通常被认为是糟糕的OOP编程。此外,您可以将其创建为静态方法,这样您就不必实际实例化父类。

ClassB

答案 1 :(得分:0)

我刚试过你的例子(包括一些缺少的self)和python3,至少它起作用了:

class Parent():
    def __init__(self):
        pass

    def something(self):
        a = child()
        return a

class Child(parent):
    def something_that_is_not_init(self):
        print('yes, you got me')

并调用something方法:

print(parent().something().__class__.__name__)
# Child
parent().something().something_that_is_not_init()
# yes, you got me

但也许这不是很好的设计。考虑工厂或使用__new__。但是既然你明确表示你想要这样的东西:它有效,即使我觉得有点破坏写它: - )