class Parent:
def __init__(self, name):
self.name = name
@classmethod
def get(cls, name):
return cls(name)
def greeting(self):
print 'Hello ' + self.name
class Child(Parent):
@classmethod
def get(cls, name):
p = Parent.get(name)
p.full_name = 'James ' + name
return p
def greeting(self):
print 'Bye ' + self.full_name
如您所见,我在Child
的get
方法中为Parent的实例添加了一个属性full_name
,问题是,现在的实例如果仍然是Parent
类型,我如何将其转换为Child
?你知道吗
您不需要更改返回对象的类型。您需要做的是使用子类的方法正在使用的} 的目的之一。首先,您需要确保使用的是新样式的类:
cls
调用父类的方法实现。这是^{Python有两个类系统的实现,因为它们第一次没有正确地实现。始终从
object
继承如果您不是从其他任何东西继承,以确保您使用的是更新、更好的系统。你知道吗现在,
super
。不要使用Parent.get(name)
,而是使用super
调用:p
将具有正确的类型,因为父方法中的cls
与子方法中的cls
是同一类。(请注意,如果以后添加了Grandchild
类,此行将生成Grandchild
对象,而不是Child
对象。这很可能是正确的行为。)使对象成为父基类:
然后将Child
p = Parent.get(name)
中的这一行更改为:这样
super(Child, cls).get(name)
将cls(Child)绑定到父get
方法,因此在结果中Parent.get
将用Child
类作为cls
参数调用。当然,要实现这一点,您需要新的样式类来解释为什么object
应该在Parent
基中!你知道吗相关问题 更多 >
编程相关推荐