我从PyCharm收到了关于未解决的参考的警告。 这里的代码结构相似,也应该收到警告。
class Parent:
"""
=== Attributes ===
@type public_attribute_1: str
"""
def __init__(self):
public_attribute_1 = ''
pass
class Child(Parent):
"""
=== Attributes ===
@type public_attribute_1: str
> Unresolved reference 'public_attribute_1'
@type public_attribute_2: str
"""
def __init__(self):
Parent.__init__(self)
public_attribute_2 = ''
pass
我了解public_attribute_1
未明确启动Child.__init__()
,Child.__init__()
调用启动Parent.__init__(self)
的{{1}} public_attribute_1
。因此,引发的错误涉及可读性和文档而不是功能。
如何在不插入冗余的情况下使这些代码更具可读性,从而破坏整个继承点? 通过文档字符串和注释进行彻底记录是否足够,只是忽略来自PyCharm的警告?或者有一种pythonic方式吗?
答案 0 :(得分:0)
这里有很多问题。
在Python 3
中使用super()
您正在将它们称为“属性”,但这不是属性在Python中的工作方式。对细节进行着色,使用self
。
您的问题似乎与您希望docstring
Child
重新定义Parent
的所有属性有关。从可维护性的角度来看,这是非常危险的,尽管有任何变化。当我看到某个类继承Parent
时,如果我不熟悉Parent
,我会转到Parent
的定义(PyCharm
使Ctrl + B
变得容易}})。
我会让别人说如果那是真的pythonic
,但这就是我习惯工作的方式。无论如何,为了修复你的继承,你的代码看起来应该更像这样:
class Parent:
"""
=== Attributes ===
@type public_attribute_1: str
"""
def __init__(self):
self.public_attribute_1 = ''
class Child(Parent):
"""
=== Attributes ===
@type public_attribute_2: str
"""
def __init__(self):
super().__init__()
self.public_attribute_2 = ''
print(self.public_attribute_1)