前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 中property & eval()的妙用

Python 中property & eval()的妙用

作者头像
Wu_Candy
发布2022-07-04 20:16:16
5640
发布2022-07-04 20:16:16
举报
文章被收录于专栏:无量测试之道
这是无量测试之道的第167篇原创

学习过Java 编程语言的小伙伴,应该都知道在Java 语言学习过程中会学到类属性的getter & setter 方法。那么在Python 中是否也有类似的方法呢?答案是,有的。

今天的分享内容是:如何使用@property 装饰器去实现Python 中的getter & setter 方法。

在代码实操之前,先来了解下@property 装饰器相关的小知识。有利于更好地理解以下实操代码。

1、Python 内置有三大装饰器: @staticmethod(静态方法) @classmethod(类方法) @property(描述符) 其中@property 则是一个非常好用的语法糖(语法糖指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法。之所以亲切地称之为“甜蜜”的语法,是因为语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读)。

@property 最大的好处就是在类中把一个方法变成属性调用,是Python 内置的功能,常用来修饰类方法,用于以访问属性的方式调用函数。

2、Python 代码实现:

代码语言:javascript
复制
 1class Person:
 2    def __init__(self,name,age,salary):
 3        self.__name=name
 4        self.__age=age
 5        self.__salary=salary
 6
 7    def set_name(self,name):
 8        self.__name=name
 9
10    def get_name(self):
11        return self.__name
12
13    def set_age(self,age):
14        self.__age=age
15
16    def get_age(self):
17        return self.__age
18
19    def set_salary(self,salary):
20        self.__salary=salary
21
22    def get_salary(self):
23        return self.__salary
24
25    @property
26    def age(self):
27        return self.__age
28
29    @age.setter
30    def age(self,age):
31        self.__age=age
32
33if __name__ == '__main__':
34    p1 = Person('tom',11,1000)
35    print(p1.get_age())
36    p1.set_age(100)
37    print(p1.get_age())
38
39    print(p1.age)
40    p1.age = 28
41    print(p1.age)
42
43    #eval()的功能:将字符串str当成有效的表达式来求值并返回计算结果。如下是将字符串转换成方法名再调用:
44    def man():
45        return "good job"
46    print(eval("man")())
47
48    #eval()可以把list, tuple, dict和string相互转化,这里以list为示例进行演示:
49    list1 = "[33,2,22,11,44,55]"
50    print(type(list1))
51    list2 = eval(list1)
52    print(type(list2))
53    print(list2)
54    print(list2[0])

3、Python 中定义只读属性

在Python 中定义只读属性非@property莫属,而定义只读属性也很简单:以需要定义的属性为方法名(如第26行:将age 属性定义为方法),在该方法上加上内置装饰器@property ,同时仍旧以属性名为方法名(如第30行:将age 属性定义为方法,并在方法名上增加@age.setter)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 这是无量测试之道的第167篇原创
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档