Python类客观性约定

时间:2018-05-10 08:16:21

标签: python class coding-style

创建这样的类是一种好的风格吗?我阅读了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

2 个答案:

答案 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'