2017-03-14 37 views
1

如果我有一个Python类,看起来像这样:它是一个很好的做法,以设置一个函数python类属性?

class MyClass(object): 

    def __init__(self, path): 
     self.path = path 

我知道我可以在这样的对象的实例更改路径属性:

my_example = MyClass("home/data") 
my_example.path = "home/other_data" 

不过,我已经看到了一些人们使用的功能代码来设置属性是这样的:

class MyClass(object): 

    def __init__(self, path): 
     self.path = path 

    def setPath(self, path): 
     self.path = path 

如果我想要的类的实例的用户能够改变一个属性,它是最好的PRACT冰在第二个例子中有这样的功能,或者让它们像第一个例子那样手动改变它?

+1

如果您正在使用属性,只需让用户使用该属性(第一个示例)即可。例如,请参阅https://docs.quantifiedcode.com/python-anti-patterns/correctness/implementing_java-style_getters_and_setters.html。请注意,@属性的东西可能有点令人困惑 - “@ property”的一个用例就是你可以改变使用属性到基于函数的getter和setter,而不会破坏你的公共API。 – mgilson

+2

如果您想要控制属性的获取/设置(代理,计算属性或验证新值),您可以使用[属性](https://docs.python.org/3/library/functions.html #property) - 否则通常允许根据第一个示例修改属性, –

+1

是的,在Python中,与Java不同,不需要创建getter/setter(除属性外)以读取/更新以_开头的属性在Python中,但有点像IDE和开发人员的私有理解)。但是通常有方法在init之后设置属性。 –

回答

-1

这取决于您在应用程序中需要的模块性。对于整体系统设计,最好让用户通过类方法访问所有的类属性。这增加了很多膨胀:每个属性的get/set方法,以及用于实际操作的更多方法。

实际上,您需要确定您可以信任多少用户。 Python更直接地编码:让用户直接犯错误。它对你来说代码更少,对大多数用户来说更容易。

但是,请考虑您的设计的波动性。你需要隐藏用户的类表示吗?你需要稍后改变一下吗?这些是将内部表示置于简单,不变的界面背后的极好理由:这样,您可以更改内部部件而不会破坏所有用户的实现。

相关问题