Как я могу инициализировать подкласс, вызывая суперкласс - PullRequest
0 голосов
/ 20 января 2019

Я хочу иметь возможность инициализировать подкласс путем вызова суперкласса. Например, я хотел бы иметь «Animal» в качестве суперкласса и «Dog» и «Cat» в качестве подклассов. Вместо того, чтобы называть собаку = Собака ("Фидо", "немецкий шеппард"), я хотел бы иметь возможность называть собаку = Животное ("Фидо", "немецкий шеппард"), и в то же время иметь собаку типа "Собака", а не "Животное"

Причиной этого является то, что мне приходится управлять большим количеством реле, схем и т. Д. Кажется, чище иметь один родительский тип в вызове для удобства использования человеком, но на стороне кода кажется неудобным писать инициализация для обработки всех различных опций для типов.

Я написал это как суперкласс и подклассы без проблем. Это всего лишь вопрос о том, как сделать его более элегантным.

# это не мой код, но это проще обсуждать, чем мой

class Pet(object):

def __init__(self, name, species):
    self.name = name
    self.species = species


class Dog(Pet):

def __init__(self, name, chases_cats):
    Pet.__init__(self, name, "Dog")
    self.chases_cats = chases_cats

def chasesCats(self):
    return self.chases_cats
...