类中属性和property
知识点
类对象/属性、实例对象/属性
实例化过程:
当通过类名(a)实例化一个对象的时候,此时会调用类中__new__方法开辟一个独立的空间并返回该空间的引用(对象b),然后将该引用传递给 __init__方法,__init__方法会在新开辟的空间中初始化属性信息(变量),而对象a所拥有的各类方法则可以通过__class__方法直接寻找到类对象中的方法。
调用方式:
实例对象:可以调用实例属性、实例方法、类属性、类方法、静态方法
类对象:可以调用类对象、类属性、静态方法
实例对象调用类属性的方式:实例对象名.__class__.类属性名
property属性
定义和调用
方法1:通过添加修饰符
- 定义时,在实例方法的基础上添加**@property装饰器**,并且仅有一个self参数。调用时,无需加括号
- 设置property属性赋值时,使用xx.setter装饰器
- 设置property属性删除时,使用xx.deleter装饰器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22class Test(object):
def __init__(self, name):
self.name = name
def listen(self):
return self.name
def listen(self, value):
self.name = value
def listen(self):
def self.name
clock = Test()
# 调用时无需加括号
clock.listen # 自动调用@property的方法
clock.listen = 200 # 自动调用@listen.setter的方法
del clock.listen # 自动调用@listen.deleter的方法方法2:通过类属性
通过正常定义函数的方式,然后通过property方法将定义的函数转变为属性即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27# property接受四个参数
# 第一个参数:调用【对象.属性】时自动触发的执行方法
# 第二个参数:调用【对象.属性 = 属性值】时自动触发的执行方法
# 第三个参数:调用【del 对象.属性】时自动触发的执行方法
# 第一个参数:调用【对象.属性.__doc__】时自动触发的执行方法
class Test(object):
def __init__(self, name):
self.name = name
def get_method(self):
return self.name
def set_method(self, value):
self.name = value
def del_method(self):
del self.name
# property中除第一个参数外,其它默认为None
listen = property(get_method, set_method, del_method, "__doc__的内容")
test = Test("name")
test.listen # 自动调用property中get_method方法
test.listen = 7 # 自动调用property中set_method方法
del test.listen # 自动调用property中del_method方法
test.listen.__doc__ # 自动输出property最后一个参数的内容
功能
定义一个私有属性,然后配置两个公有方法用于对私有属性的数据进行过滤。此时通过property方式更加简洁
优势
如果通过函数的方式进行调用,则需要考虑是否需要传递参数,而通过property装饰器则不需要考虑。简化了调用者获取数据的流程