python学习笔记-2(OOP)

标签(空格分隔): Python


使用@property

在Python的官方帮助文档中有关于property类(built-in class)的说明(The Python Standard Library/2 Built-in Functions)

class Student(object):
    def __init__(self,name='empty'):
        self._name = name
    def get_name(self):
        return self._name
    def set_name(self,name):
        self._name = name
    def del_name(self):
        del self._name
    name = property(get_name, set_name, del_name, 'i am the property sample')

foo = Student("xiaoming")
print (foo.name)
foo.name  = 'haizhen'
print (foo.name)
del foo.name

通过上面的例子可以看出,property可以使得类属性的访问、设置即隐晦又直接(把普通的赋值语句与方法联系在一起)。因为property还可以作为装饰器,一个property对象有getter,setter,和deleter三个方法,因此对于上面的例子还可以有另外一种写法:

class Student(object):
    def __init__(self,name='empty'):
        self._name = name
    @property
    def name(self):
        return self._name
    @name.setter
    def name(self,name):
        self._name = name
    @name.deleter   
    def name(self):
        del self._name


foo = Student("xiaoming")
print (foo.name)
foo.name  = 'haizhen'
print (foo.name)
del foo.name

如果不定义setter那么就相当于是一个只读属性:

class Student(object):

    @property
    def birth(self):
        return self._birth

    @birth.setter
    def birth(self, value):
        self._birth = value

    @property
    def age(self):
        return 2015 - self._birth

上面的例子中,age就是只读的

练习:利用@property给一个Screen对象增加width与height属性,以及一个只读属性resolution

解答:

class Screen(object):
    @property
    def width(self):
        return self._width
    @width.setter
    def width(self,width):
        self._width = width
    @property
    def height(self):
        return self._height
    @height.setter
    def height(self,height):
        self._height = height    
    @property
    def resolution(self):
        return self._height * self._width

bar = Screen()
bar.width = 3480
bar.height = 2160

print(bar.resolution)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值