您好,匿名用户
随意问技术百科期待您的加入

python中不用getter和setter?

0 投票

我看到一个文章(http://blog.renren.com/share/22109505...)

Getter和setter是坏蛋。坏蛋,魔 鬼!Python对象不是Java Bean。不要写什么getter和setter,然后还把它们包装在“属性”里面。它直到你能证明你需要比一个简单访问复杂一点的功能时才有意义,否 则,不要写getter和setter。它们是CPU时间的浪费,更要紧的是,它们还是程序员宝贵时间的极大浪费。不仅仅对于写代码和测试的人,对于那些 要阅读和理解它们的人也是。

在 Java中,你必须使用getter和setter因为公共字段不允许你以后改变想法再去使用getter和setter。在Python中,这样做很 傻,因为你可以以一个普通特性开始并可以在任何时间改变你的想法,而不用影响到这个类的任何客户。所以不要写getter和setter。

但是当我想设置对象的一个属性时,是用obj.attr=value这样直接赋值么?
但是当我赋值某一个属性attr1时,其他有些关联属性attr2是应该可以自动生成的(通过对attr1的一些操作得到attr2应有的值),如果有setter,那么这个运算的过程可以写在setter里,如果不用setter那这个运算应该在哪里写呢?

谢谢

用户头像 提问 2012年 12月1日 @ 随意问站长 上等兵 (310 威望)
分享到:

1个回答

0 投票
 
最佳答案

可以看下python文档里property setter/getter相关部分

import datetime, re

DATE_PATTERN = re.compile('^\d+\-\d+\-\d+$')

def str_to_date(date):
    if isinstance(date, datetime.date):
        return date
    elif isinstance(date,str) and DATE_PATTERN.match(date):
        return datetime.date(*map(int, date.split('-')))
    raise TypeError


class Person(object):
    def __init__(self, name, birthday):
        self.name = name
        self.birthday = birthday
        
    @property
    def birthday(self):
        return self._birthday
    
    @birthday.setter
    def birthday(self, birthday):
        self._birthday = str_to_date(birthday)
    
    @property
    def age(self):
        return datetime.date.today() - self.birthday
    
    
    def __str__(self):
        return '%s,%s(%s)'%(self.name,self.birthday, self.age)
    


person = Person('Xiao Ming','1980-10-1')

print(person)
 
person.birthday = '1981-1-2'

print(person)

person.birthday = datetime.date(1979,12,12)

print(person)

person.birthday = '123456' # raise TypeError
用户头像 回复 2012年 12月1日 @ Emiya Shirou 上等兵 (438 威望)
选中 2012年 12月1日 @随意问站长
提一个问题:

相关问题

0 投票
1 回复 29 阅读
0 投票
0 回复 32 阅读
用户头像 提问 2012年 12月1日 @ Swain 上等兵 (232 威望)
0 投票
1 回复 27 阅读
用户头像 提问 2013年 11月14日 @ Cancer 上等兵 (211 威望)
0 投票
1 回复 282 阅读
用户头像 提问 2012年 12月1日 @ Apollo 上等兵 (269 威望)
0 投票
1 回复 27 阅读
用户头像 提问 2014年 1月27日 @ Kassadin 上等兵 (255 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...