我正在用python学习OOP。

我正在努力为什么这不能按我预期的那样工作?

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]: ''


我犯了什么明显的错误,使我无法在USPatent实例中获得kc?

最佳答案

您正在传递一个空字符串:

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只是另一个变量,就像selfCCPN。它要么已设置为"",要么设置为使用参数调用USPatent(...)时传递的任何内容。您只想调用Patent.__init__()方法,并传递您拥有的所有值。

您也可以从调用中删除关键字参数语法:

Patent.__init__(self, CC, PN, KC)

关于python - 了解python中的继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40080783/

10-12 17:02
查看更多