derivedClass
- это , а не , фактически полученное из baseClass
. Чтобы создать подкласс в Python, вы должны предоставить родительский класс для определения класса следующим образом:
class DerivedClass(BaseClass):
pass
DerivedClass
теперь наследует методы BaseClass, , включая __init__()
. Если вы не переопределите метод, вызов его в вашем подклассе фактически вызовет метод, определенный в суперклассе.
Итак, если вы хотите разрешить DerivedClass(name='Jibin')
, вам необходимо предоставить специальную init ():
class BaseClass(object):
def __init__(self, mark, name):
self.mark = mark
self.name = name
class DerivedClass(BaseClass):
def __init__(self, mark, name, rank):
BaseClass.__init__(self, mark, name)
self.rank = rank
Теперь вы также хотите поддерживать дополнительные аргументы ключевых слов для DerivedClass()
без их явного добавления. Один из способов добиться этого - назначить все kwargs
атрибутам экземпляра, таким образом:
class BaseClass(object):
def __init__(self, mark, name, **kwargs):
self.mark = mark
self.name = name
self.__dict__.update(kwargs)
Хотя я не советую это «по-настоящему». Слепая установка атрибутов может привести к незначительным ошибкам в будущем (такие вещи, как бессознательная замена метода путем передачи ключевого слова arg с тем же именем)