找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3467|回复: 4

[代码与实例] 请教,属性包装为何没有生效?

11

主题

26

帖子

26

积分

贫民

积分
26
jingseyi2011 发表于 2017-11-17 16:50:07 | 显示全部楼层 |阅读模式
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Box:
    def __init__(self):
        self._color = 0
        
    @property
    def color(self):
        return self._color
    @color.setter
    def color(self,color):
        if 0< color <7:
            self._color = color
        else:
            print ('set failure!')
   
    def set_color (self,color):
        print('color:',color)
        self.color = color
   
if __name__ == '__main__':
    a = Box()
    a.set_color(11)

上面代码执行后,输出color值为:
('color:', 11)

这里的属性封装为什么没有生效?
回复

使用道具 举报

2

主题

219

帖子

219

积分

版主

Rank: 7Rank: 7Rank: 7

积分
219

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-11-20 10:11:22 | 显示全部楼层
本帖最后由 剑心无痕 于 2017-11-20 11:43 编辑

你应该是想这样吧
class Box(object):
    def __init__(self):
        self._color = 0
        
    @property
    def color(self):
        return self._color
    @color.setter
    def color(self,color):
        if 0< color <7:
            self._color = color
        else:
            print ('set failure!')

if __name__ == '__main__':
    a = Box()
    a.color = 11
    print a.color
    a.color = 6
    print a.color
回复 支持 反对

使用道具 举报

11

主题

26

帖子

26

积分

贫民

积分
26
jingseyi2011  楼主| 发表于 2017-12-13 14:37:24 | 显示全部楼层
谢谢!
其实我是想问为什么属性封装没有生效?
@color.setter
     def color(self,color):
         if 0< color <7:
             self._color = color
         else:
             print ('set failure!')

按照上面程序,对于color值为11,是否应该输出set failure!才对

回复 支持 反对

使用道具 举报

2

主题

219

帖子

219

积分

版主

Rank: 7Rank: 7Rank: 7

积分
219

热心会员默默耕耘优秀版主

剑心无痕 发表于 2017-12-13 14:57:18 | 显示全部楼层
jingseyi2011 发表于 2017-12-13 14:37
谢谢!
其实我是想问为什么属性封装没有生效?
@color.setter

class Box(object):仔细看看区别在这里
python3只需要class Box:
而python2需要继承object才能使用@property
回复 支持 反对

使用道具 举报

11

主题

26

帖子

26

积分

贫民

积分
26
jingseyi2011  楼主| 发表于 2017-12-13 16:45:55 | 显示全部楼层
受教了,多谢多谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表