python – __init __()的“私有”参数?

python – __init __()的“私有”参数?,第1张

概述我有一个类在实例化时采用单个参数a,它存储在_a属性中.对于许多方法(运算符),我还需要在结果上设置_b属性.目前这是以直截了当的方式实施的: class SomeClass(object): def __init__(self, a=0): self._a = a self._b = 0 def __add__(self, other): 我有一个类在实例化时采用单个参数a,它存储在_a属性中.对于许多方法(运算符),我还需要在结果上设置_b属性.目前这是以直截了当的方式实施的:

class SomeClass(object):    def __init__(self,a=0):        self._a = a        self._b = 0    def __add__(self,other):        result = self.__class__()        result._b = self._a + other._a        return result

现在,我有一些像_b这样的成员,比如_c和_d,所以__add__将需要为这些属性中的每一个添加额外的行.能够在对象实例化上传递这些将导致更清晰的代码:

class SomeClass(object):    def __init__(self,a=0,_b=0):        self._a = a        self._b = 0    def __add__(self,other):        return self.__class__(_b=self._a + other._a)

但是,我不希望用户传递所有参数的值,除了as _b,_c和_d是实现细节.我可以简单地在docstring中声明不要传递多个参数.使用下划线在“私有”属性之前是为了反映这一点.

或者,通过提供第二个私有构造函数,我可以尝试让用户更难行为:

class SomeClass(object):    def __init__(self,a=0):        self._a = a        self._init()    def _init(self,_b=0):        self._b = _b    @classmethod    def _constructor(cls,a,_b):        obj = cls(a)        obj._init(b)        return obj    def __add__(self,other):        return self.__class__._constructor(_b=self._a + other._a)

我认为这是一个相当笨重的解决方案.

什么是解决这个问题的首选方法?还有其他更优雅的解决方案吗?这真的是一个问题;我应该使用第一个选项并最终获得更多代码行吗?

解决方法 通过python世界,_下划线惯例清晰而普遍.

您记录了您的’public’属性,只使用带有下划线的默认参数到__init__方法.把事情简单化.

如果有人想通过使用这些私有参数搞砸一个类,你不会阻止它们,而不是Python.

总结

以上是内存溢出为你收集整理的python – __init __()的“私有”参数?全部内容,希望文章能够帮你解决python – __init __()的“私有”参数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存