В Интернете я читал, что питонным способом перегрузки конструкторов было создание методов класса. Поэтому я создал класс RectF
, который можно инициализировать одним из двух способов.
class RectF:
def __init__(self, x: float, y: float, w, h):
self.x: float = x
self.y: float = y
self.width = w
self.height = h
@classmethod
def from_tuples(cls, pos: tuple, size: tuple):
return cls(pos[0], pos[1], size[0], size[1])
Конструктор init принимает аргумент для каждого поля, а метод from_tuples
принимает два кортежа, содержащие координаты и размер. соответственно.
Однако, когда я иду инициализировать экземпляр подкласса, используя метод from_tuples
, возникает исключение. Использование super().__init__()
работает нормально.
class Entity(RectF):
def __init__(self, pos: tuple, size: tuple, vel: tuple):
super().__init__(pos[0], pos[1], size[0], size[1])
# I would like to initialize the superclass using the from_tuples class method.
# super().from_tuples(pos, size)
# This throws the following exception: __init__() takes 4 positional arguments but 5 were given
self.vel_x = vel[0]
self.vel_y = vel[1]
Приведенный выше код является примером, и пока работает нормально. Но для удобства чтения и обслуживания;и в качестве наилучшей практики было бы полезно инициализировать объекты, используя наименьшее количество аргументов, особенно если они со временем становятся более сложными.