我在类继承方面遇到问题,无法在其他地方找到合适的解决方案。
我有2个类,分别是Parent
类和Child
类。
Child
是Human
的一种,因此我想使用类继承,通常我们只是简单地使用类继承。
class Human:
def __init__(self,type,name): # Do this when we create a Node instance
self.type = type
self.name = name
class Child(Human):
def __init__(self,name,siblings): # Do this when we create a Node instance
super().__init__(type=Child,name=name)
self.siblings = siblings
但是我很痛苦,我想使用Human.Child(parameters)
而不是Child(parameters)
创建实例,并且我不想在主作用域中有一个Child
类。
我已经设法通过使用类方法来使它起作用,但是这很混乱。有更优雅的解决方案吗?
class Human:
def __init__(self,type,name): # Do this when we create a Node instance
self.type = type
self.name = name
def execute(self):
print(f"executing the Human {self.name}")
@classmethod
def Child(cls,*args,**kwargs):
class Child(cls):
def __init__(self,name,siblings):
super().__init__(type=Child,name=name)
self.siblings = siblings
def execute(self):
print(f"executing the Child {self.name}")
return(Child(*args,**kwargs))
理想情况如下所示,但是我们当然不能将Human
传递给Child
类,因为它尚未定义。
class Human:
def __init__(self,type,name): # Do this when we create a Node instance
self.type = type
self.name = name
def execute(self):
print(f"executing the Human {self.name}")
class Child(Human):
def __init__(self,name,siblings):
super().__init__(type=Child,name=name)
self.siblings = siblings
def execute(self):
print(f"executing the Child {self.name}")
答案 0 :(得分:4)
遇到类定义时,直到读取整个正文并积累完整的字典后,才创建类对象。这与模块对象的创建方法相反,在模块对象中,空模块立即可用,以帮助避免循环导入等。话虽如此,没有什么可以阻止您在完全创建类之后修改其属性。
class Human:
def __init__(self,type,name): # Do this when we create a Node instance
self.type = type
self.name = name
class Child(Human):
def __init__(self,name,siblings): # Do this when we create a Node instance
super().__init__(type=Child,name=name)
self.siblings = siblings
Human.Child = Child
del Child
请记住以下几点:
type
函数访问该信息。