栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

即使我清楚地为其分配了一个不同的值,方法属性也不会自动更新

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

即使我清楚地为其分配了一个不同的值,方法属性也不会自动更新

OP中出了什么问题?

如果我们

person
在用行实例化对象后立即打开它
person = Email("James")
,则将是这样的:

person {"name"  : "James", "email" : "James@hotmail.com"}

如果像您一样使用来更新

name
person
对象中的变量
person.name ="Michael"
,然后
person
再次打开该对象,则可能是:

person {"name"  : "Michael", "email" : "James@hotmail.com"}

请注意,在此阶段,它仍然是

person
我们之前实例化的对象,并且该
email
变量未从其先前状态更改,因为我们尚未对其进行任何处理。


通过将

email
field设置为
property
,并使用
name
变量动态设置,@
chepner发布的答案
非常好且干净。以下是@chepner的代码的副本:

class Email:    def __init__(self, name):        self.name = name        # self.email = self.name + "@hotmail.com"    @property    def email(self):        return f'{self.name}@hotmail.com'    def details(self):        return f'{self.name} | {self.email}'

什么是
property
它,如何使用?

property
是Python内置函数,
property
对象具有以下方法:

  • getter
    :用于获取属性值
  • setter
    :用于设置属性值
  • deleter
    :用于删除属性值

现在,@
chepner的答案中
到底发生了什么?在下面的行中,我们将设置

email
property

    @property    def email(self):        return f'{self.name}@hotmail.com'

并且此装饰功能也可以用作

getter
例如
person.email

请注意,在这里我们没有将其链接到变量(如Python文档示例所示),如果需要/需要,我们可以通过替换

return
语句并在中设置
_email
变量来实现
__init__

    def __init__(self, input_name):        self._name = input_name        self._email = f'{self._name}@hotmail.com'    @property    def email(self):        return self._email

然后,对于

setter
deleter
,我们可以将它们创建为:

    @email.setter    def email(self, input_email):        self._email = input_email    @email.deleter    def email(self):        del self._email

请注意,

getter
setter
,和
deleter
方法都具有相同的名称
property
,只是不同的装饰。

从问题描述中,不需要支持单独更新电子邮件地址,但是仅在此示例之后,如果我们运行

person.email ="Michael@hotmail.com"
,因为它是
email
a
property
,它将触发将
setter
设置为
_email
变量的值。


回到@chepner的答案中的

details
方法:

    def details(self):        return f'{self.name} | {self.email}'

通过执行此操作,

self.email
我们触发,
getter
以返回该
return
语句中动态生成的电子邮件地址
returnf'{self.name}@hotmail.com'



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号