2016-03-04 81 views
-1

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

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 

子类继承父类的初始化。所以我的问题是,在我的父类中,我可以创建一个子对象的实例,使用并返回它?

我会执行它如下:

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

b.something_that_is_not_init() 
3 

编辑的问题了一下,更新的代码段,因为这个问题不明确。

+1

这将是非常糟糕的OOP设计。毕竟,'Child'已经有了一个很好的方法来实例化它。为什么'Parent'需要这样一种方法?与每个班级有关的事情应该包含在他们所应用的班级中。 – kindall

+1

你想通过这样做解决什么问题? – IanAuld

+0

那就是我的想法,它是一个赋值,它明确地希望其中一个函数返回一个子类的实例。编辑:其实,我可能在我的问题中看起来过于简单,除了创建并返回外,还有其他步骤需要执行。 – gptt916

回答

0

是的,它是有效的,但我不推荐它。它通常被认为是糟糕的OOP编程。此外,你可以创建它作为一个静态方法,所以你永远不必实例化父类。

class parent(): 
    def __init__(self, i): 
     self.i = i 

    @staticmethod 
    def foo(i): 
     c = child(i) 
     return c 

class child(parent): 
    def bar(self): 
     print("Lucker number {}.".format(self.i)) # just to show the parent __init__ function is called 

c = parent.foo(7) 
c.bar() #=> Lucky number 7. 
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__。但既然你明确表示你想要这样的东西:它的工作原理,尽管我觉得它有点被宠坏了:-)

相关问题