class P:
def __init__(self):
pass
@staticmethod
def from_static():
return P()
def parent():
print("parent")
class C(P):
def child():
print("child")
c = C.from_static()
dir(c)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'from_static', 'parent']
Нет дочернего () метода!
Метод stati c перенаправляет свой собственный метод __init__, который находится в классе родителя. В результате экземпляр метода 'c' не может иметь метод child ().
Как мы можем определить класс 'c' с помощью дополнительного метода child (), если мы хотим создать с помощью метод stati c в родительском? Мне не нужно трогать класс 'p'.
def f(x):
return x*2, x**2
class P:
def __init__(self, a, b):
self.a = a
self.b = b
@staticmethod
def from_static(x):
a, b = f(x)
return P(a, b)
def parent():
print("parent")
class C(P):
def child():
print("child")
c = C.from_static()
dir(c)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'from_static', 'parent']
Второй код - это заданный код, который немного больше.