#python #inheritance
#python #наследование
Вопрос:
Я изучаю ООП на python.
Я изо всех сил пытаюсь понять, почему это работает не так, как я предполагал?
class Patent(object):
"""An object to hold patent information in Specific format"""
def __init__(self, CC, PN, KC=""):
self.cc = CC
self.pn = PN
self.kc = KC
class USPatent(Patent):
""""Class for holding information of uspto patents in Specific format"""
def __init__(self, CC, PN, KC=""):
Patent.__init__(self, CC, PN, KC="")
pt1 = Patent("US", "20160243185", "A1")
pt2 = USPatent("US", "20160243185", "A1")
pt1.kc
Out[168]: 'A1'
pt2.kc
Out[169]: ''
Какую очевидную ошибку я совершаю, чтобы не получить kc в экземпляре USPatent?
Ответ №1:
Вы передаете пустую строку:
Patent.__init__(self, CC, PN, KC="")
Это вызывает параметр Patent.__init__()
метода KC
""
, всегда.
Передайте любое значение KC
, которое вы получили вместо этого:
class USPatent(Patent):
""""Class for holding information of uspto patents in Specific format"""
def __init__(self, CC, PN, KC=""):
Patent.__init__(self, CC, PN, KC=KC)
Внутри USPatent.__init__()
, KC
это просто еще одна переменная, такая же, как self
и , CC
и PN
. Для него либо установлено значение ""
already, либо все, что было передано при вызове USPatent(...)
с аргументами. Вы просто хотите вызвать Patent.__init__()
метод, передающий все имеющиеся у вас значения.
Вы также можете удалить синтаксис аргумента ключевого слова из вызова:
Patent.__init__(self, CC, PN, KC)
Комментарии:
1. Я все еще не понимаю, как использовать KC = KC?
2. @Rahul: помогло бы, если бы вы добавили
print(CC, PN, KC)
в свою функцию? Вы увидите, что происходит со значениями.3. @Rahul обратите внимание, что это
KC=""
означает разные вещи при определении функции с аргументами ключевого слова по умолчанию , в отличие от вызова функции с аргументами ключевого слова.4. Я знаю, что по умолчанию, но KC=KC сбивал с толку. Теперь понял.
Ответ №2:
Строка
Patent.__init__(self, CC, PN, KC="")
Должно быть
Patent.__init__(self, CC, PN, KC)
Первый устанавливает аргумент с именем «KC» в значение ""
(пустую строку), используя синтаксис аргумента в стиле ключевого слова. Вместо этого вы хотите передать значение переменной KC
.
Ответ №3:
class USPatent(Patent):
""""Class for holding information of uspto patents in Specific format"""
def __init__(self, CC, PN, KC=""):
Patent.__init__(self, CC, PN, KC="")
Здесь вы передаете KC
как ""
кодирование KC=""
, вместо KC=KC
Для передачи введенных KC
:
class USPatent(Patent):
""""Class for holding information of uspto patents in Specific format"""
def __init__(self, CC, PN, KC=""):
Patent.__init__(self, CC, PN, KC)