创建这样的类是一种好的风格吗?我阅读了PEP8文件,但我没有看到任何好的例子。如果不是,它是如何正确的方式?谢谢你的回答。
class Zone:
def __init__(self, index=None, name=None):
self._index = index
self._name = name
@property
def index(self):
return self._index
@property
def name(self):
return self._name
@index.setter
def index(self, index):
self._index = index
@name.setter
def name(self, name):
self._name = name
答案 0 :(得分:0)
你的安装员和吸气者什么都不做。通过实现,此类的用户可以执行此操作:
z = Zone()
z.name = 'foo'
print(z.name)
与此实施相比:
class Zone:
def __init__(self, index=None, name=None):
self.index = index
self.name = name
z = Zone()
z.name = 'foo'
print(z.name)
它的工作原理完全相同,代码少得多。
除非你做你的安装者和/或吸气者,否则你不需要它们。
答案 1 :(得分:0)
如果您打算做的是封装数据并使用setter设置并使用getter获取数据,那么您所做的将没有用处。你声明_name和_index是受保护的,它并不意味着它不能被extenal函数访问,所以类外的函数可以轻松访问和更改它们,使你的getter和setter变得无用。
但是,您可以通过在前面使用一个额外的下划线将它们声明为私有,这样您的属性类将被删除,然后setter类将很有用,它将不再被外部函数访问。
class Zone:
def __init__(self,index=None,name=None):
self.__index = index
self.__name = name
def index(self, index):
self.__index = index
def name(self, name):
self.__name = name
def get_name(self):
return self.__name
zone=Zone()
zone.name('ben')
print(zone.get_name())
>>>ben
print(zone.__name)
>>> AttributeError: 'Zone' object has no attribute '__name'