如何在python中获取设置器和获取器

时间:2019-10-12 03:45:43

标签: python

要使用以下内容:

class MyClass:
    def __init__(self):
        self.title = None
    @title.setter
    def title(self, title):
        print ('TITLE SETTER: %s' % title)
        self._title = title
  

NameError:名称“ title”未定义

上面的代码有什么问题?

1 个答案:

答案 0 :(得分:3)

在您第一次创建该名称之前,该名称title不会出现在类的主体中。 事实是,允许getter和setter以这种方式在Python中存在的是描述符协议-具有名为property{ . Back in the old times (circa Python 2.4), it was found out that if property taking a single argument would return a property object with a。setter`的帮助器可调用属性,该属性可用作装饰器为同一对象注册设置方法。

在此之前,必须先将getter,setter和deleter声明为普通方法,并用如下一行创建属性对象: title = property(title_getter, title_setter, tittle_deleter)在班级正文中。

因此,如果您这样做:

class MyClass:
    def __init__(self):
        self.title = None

    @property
    def title(self):
        return self._title

    @title.setter
    def title(self, title):
        print 'TITLE SETTER: %s' % title
        self._title = title

您的代码将可用,因为property是使用 函数title作为参数-然后返回一个property对象, 其中有一种__get__方法将导致该原始 要调用的title函数以及setterdeleter属性, 是可调用的-title.setter用作修饰符时, 只需在内部将其添加到属性对象中,以便其__set__方法 将导致它被调用。 (__set__内部使用的描述符协议以及__delete____get__property方法的工作在Data Model语言中进行了说明)