Python class 客观性惯例

Python class objectivity convention

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

您的 setter 和 getter 什么都不做。通过您的实施,此 class 的用户会这样做:

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)

它的工作原理完全相同,代码少得多。

除非你你的二传手and/or吸气剂中的任何东西,否则你不需要它们。

如果您打算做的是封装您的数据并使用 setters 设置它并使用 getters 获取它,那么您所做的将无济于事。您将 _name 和 _index 声明为受保护的,这并不意味着它不能被外部函数访问,因此 class 之外的函数可以轻松访问和更改它们,使您的 getter 和 setter没用。

但是,您可以通过在前面使用一个额外的下划线来将它们声明为私有,这样您的 属性 class 将被删除,然后 setters class 会有用,不会再被外部函数访问了。

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'