我将从描述我目前面临的困境开始。我有一个类(我们称之为NeatClass
)。它有几个实例属性,我通常在类__init__()
方法中声明所有这些属性。我正在向类中添加一个新方法(我们称之为util_method()
),它需要在调用之间保持一个内部状态。我的意图是将该状态存储在实例属性中(我们称之为self._util_attr
)
现在,根据“常规指南”,我应该在{
class NeatClass:
def __init__():
self.attr1 = ...
self.attr2 = ...
# ...
self._util_attr = None # type: ignore
我知道在__init__()
内声明实例属性应该可以提高代码的可读性(请参见this和this等等问题)——我完全同意这一点。然而,在我的用例中,这样做可能会产生相反的效果。原因如下:
util_method()
应该使用self._util_attr
李>util_method
成为我的类的API的一部分,但它只在少数情况下使用(大多数NeatClass
实例根本不会使用此方法)李>mypy
键入提示代码。在调用NeatClass.__init__()
期间,self._util_attr
的类型未知(因此注释# type: ignore
)。由于超出这个问题范围的原因,我不能使用Union
或类似的东西来键入hint这个变量李>所以,我真正想做的是:
class NeatClass:
def __init__():
self.attr1 = ...
self.attr2 = ...
# ...
def util_method(self):
if not hasattr(self, "_util_attr"):
self._util_attr = ... # initial value of the variable
# ...
但是,我希望我的代码同时遵循PEP8和Google Python Style Guide。因此,我在这两条准则中搜索了对在__init__()
之外声明实例属性是可以接受的情况的引用。正如你可能想象的那样,我什么也没找到。事实上,我根本没有找到任何关于“在__init__()
内声明实例属性”的内容,这真是令人惊讶。这就引出了我的问题:
在Python的通用样式指南(特别是PEP8和Google的)中,是否存在允许在__init__()__
之外声明实例属性的情况?
在这些指导原则中,指向指定实例属性只应在__init__()
内声明的位置的指针也是值得赞赏的。此外,关于如何重构我的代码的建议也是受欢迎的
请注意,我不是在寻求意见(这反过来会违反StackOverflow的指导方针)。我只是在寻找Python最常见的样式指南中针对我描述的情况的部分的参考。我也不认为这个问题是重复的——我读过其他几个SO关于这个问题的问题,他们似乎都没有问我这里要问的问题
谢谢你抽出时间
目前没有回答
相关问题 更多 >
编程相关推荐