Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python @property与getters和setter?

Python @property与getters和setter?

提问于 2017-12-18 05:04:39
回答 2关注 0查看 316

这是一个Python特有的设计问题:

代码语言:txt
AI代码解释
复制
class MyClass(object):
代码语言:txt
AI代码解释
复制
    ...
代码语言:txt
AI代码解释
复制
    def get_my_attr(self):
代码语言:txt
AI代码解释
复制
        ...
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    def set_my_attr(self, value):
代码语言:txt
AI代码解释
复制
        ...
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
class MyClass(object):
代码语言:txt
AI代码解释
复制
    ...        
代码语言:txt
AI代码解释
复制
    @property
代码语言:txt
AI代码解释
复制
    def my_attr(self):
代码语言:txt
AI代码解释
复制
        ...
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    @my_attr.sette
代码语言:txt
AI代码解释
复制
    def my_attr(self, value):
代码语言:txt
AI代码解释
复制
        ...

Python可以让我们做到这一点。如果如果要设计一个Python程序,你会使用哪种方法,为什么?

回答 2

不知雨

修改于 2017-12-18 06:00:18

在Python有很多方法(要做到这一点getattr,setattr,__getattribute__,等等,但一个非常简洁和干净的一个是:

代码语言:txt
AI代码解释
复制
def set_email(self, value):
代码语言:txt
AI代码解释
复制
    if '@' not in value:
代码语言:txt
AI代码解释
复制
        raise Exception("This doesn't look like an email address.")
代码语言:txt
AI代码解释
复制
    self._email = value
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
def get_email(self):
代码语言:txt
AI代码解释
复制
    return self._email
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
email = property(get_email, set_email)

秋之夕颜清

发布于 2017-12-18 05:59:44

Python中,您不使用getter或setter或属性仅仅为了它的乐趣。您首先只使用属性,然后再使用,最后只需要,最终迁移到一个属性,而不必使用类更改代码。

确实有很多扩展名为.py的代码,它们使用getter和setter以及继承和无意义的类,例如一个简单的元组可以完成,但是它是使用Python编写C ++或Java的人的代码。

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

Property or method isShowConversationHeader?

077

Cannot read property 'cloudCustomData' ?

1454

Cannot read property 'vodSessionKey' of undefined?

0221

Python依赖与环境?

024

小程序报错Cannot read property 'skey' of null?

22K
相关问答用户
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档