python属性_python属性

<1>属性包装:将方法包装成属性,以隐藏相关的现实,进而控制属性的类型或范围;是虚拟的属性

外界访问时就可以像访问类属性一样使用点(.)的方式

<2>属性包装的三种操作:

<1>@property

<2>@property_name.setter

<3>@property_name.deleter

例子:

class Person:

def __init__(self, name="seven", age=None):

self._name = name

self.age = age

@property

def name(self):

return self.name

@name.settter

def name(self, name):

if 0 < name <=18:

self._name = name

else:

print("errors!")

if __name__ == '__main__':

p = Person()

print(p.name)

<3>__call__():让类的实例像方法一样可调用

class Pepole:

def __call__(self):

print("call")

if __name__ == '__main__':

p = Person()

p()

<4>描述符

将实现特殊协议方法的类作为另外一个类的类属性,用来拦截和控制属性访问并可以重复利用

协议方法:

__get__()

__set__()

__delete__()

分类:

数据描述:实现了全部的协议方法

非数据描述:实现部分的协议方法

说明:所有的类成员函数都是非数据描述,因为类成员函数只实现了协议方法中的一种

同名的实例属性和非数据描述符(以方法为例,会覆盖方法)访问的优先级

note:这只能在新式类中使用

class Person:

def __init__(self, defautl=0):

self.default = default

def __get__(self, instance, owner):

return self.defautl

def __set__(self, instance, val):

if val > 0:

self.default = val

else:

print("done")

def __delete__(self, instance):

pass

class Score:

core = Person()

cores = Person()

if __name__ == '__main__':

s = Score()

print(s.core)

print(s.cores)

s.cores = 2

print(s.cores)

s.core = -2

print(s.core)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值