如何使用类作用域初始化子类? 如何将父抽象类作用域传递给子类?在
我可以写这段代码,但每次调用getChild时,我都会创建一个类,但要避免:
class Parent(object): # abstract class!
@staticmethod
def getParentName():
raise NotImplementedError()
@classmethod
def getChild(cls): # solid class
class Child(object):
@staticmethod
def getChildName():
return 'Child of ' + cls.getParentName()
return Child
class SomeParent(Parent):
@staticmethod
def getParentName():
return 'Solid Parent'
print SomeParent.getChild().getChildName() # == 'Child of Solid Parent'
如何将上面的代码转换为在父作用域中定义子类(考虑到父类是抽象的,因此我们不能使用Parent2.getParentName(),因为它将被重写?在
^{pr2}$除了不具建设性的以外,任何帮助或暗示都是受欢迎的。在
你不能。在
Python没有class声明。它有类定义。当您定义
Parent2
类时,缩进的代码是执行的。这意味着在其中定义的任何内部类都是在父类存在之前创建的。因此,不可能让Child2
知道类范围内的Parent2
。 注意,这与其他语言非常不同,比如Ruby,do允许在定义内引用类。在还请注意,您的两个例子做了两件非常不同的事情。如果将类定义放在一个方法中,则每次调用该方法时都会创建一个新的类,而在类范围内这样做意味着只会创建一个类 在父范围内。在
我也相信你的设计是坏的。如果
Child
与Parent
严格相关,那么您要么使用继承,在这种情况下,您只需执行self.getParentName()
,而不需要任何花哨的操作,要么就可以使用委派。在如果你真的想这么做,那么你必须在父类被定义之后以某种方式“修复”这些类。为了做到这一点,你可以使用类修饰符,或者简单地将代码显式地放在父类之后。在
相关问题 更多 >
编程相关推荐