У меня проблема с наследованием классов, и я не смог найти подходящего решения в другом месте.
У меня есть 2 класса: класс Parent
и класс Child
.
A 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}")