微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么是将 __init__ 分离为子方法的干净方法,同时不会获得“在 __init__ 之外定义的实例属性 _”

如何解决什么是将 __init__ 分离为子方法的干净方法,同时不会获得“在 __init__ 之外定义的实例属性 _”

考虑

class A:
    def __init__():
        self._n1 = "n1"
        self._n2 = "n2"

        self._m1 = "m1"
        self._m2 = "m2"    

    def usage_foo(self):
        self._n1 = "n1 again"

控制这种初始化的一个方法是将其拆分为逻辑部分:

class A:
    def __init__(self):
        self.__init_n()
        self.__init_m()

    def __init_n(self):
        self._n1 = "n1"
        self._n2 = "n2"

    def __init_m(self):
        self._m1 = "m1"
        self._m2 = "m2"

    def usage_foo(self):
        self._n1 = "n1 again"

这比第一种方式有一个很好的干净优势,但 Pycharm 哭了:

Instance attribute _n1 defined outside __init__ 

self._n1 = "n1 again"

__init__ 分成子方法而不触发(好的)Pycharm 封装检查器的正确方法是什么?

我想让 Pycharm(或开发人员)知道(并强制执行)__init_n__init_m 是并且应该只从 __init__ 调用,或者实现这种模块化的另一种方式.

显然,我可以定义 class Nclass M,但我试图避免这种情况。


按照@TigerhawkT3 的评论进行编辑:

如果你在里面定义了 __init_n 和 __init_m,它还会对你大喊大叫吗? init 而不是将它们定义为实例方法?那会 当然强制他们只能在

调用
class A:
    def __init__(self):
        def init_n():
            self._n1 = "n1"
            self._n2 = "n2"

        def init_m():
            self._m1 = "m1"
            self._m2 = "m2"

        init_n()
        init_m()

    def usage_foo(self):
        self._n1 = "n1 again"

令人惊讶的是,它仍然在喊。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。