Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 中property & eval()的妙用

Python 中property & eval()的妙用

作者头像
Wu_Candy
发布于 2022-07-04 12:16:16
发布于 2022-07-04 12:16:16
59100
代码可运行
举报
文章被收录于专栏:无量测试之道无量测试之道
运行总次数:0
代码可运行
这是无量测试之道的第167篇原创

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

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

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

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

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

2、Python 代码实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python @property
在Python中如果我们不希望类的方法被修改,可以使用@Property装饰器。它可以修饰方法,将该被修饰的方法转为相同名称的只读属性;也可以与属性配合使用,来防止属性被修改。
Steve Wang
2021/12/06
4400
24. 企业级开发基础5:面向对象特征(封装)
在我们程序开发过程中,定义好类型之后就可以通过类型来创建对象 如:我们定义一个中华人民共和国公民的类型
大牧莫邪
2018/08/27
2510
Python - 面向对象编程 - @property
可以实现在不破坏类封装原则的前提下,让开发者依旧使用 对例对象.属性 的方式操作类中的属性
小菠萝测试笔记
2021/09/08
3080
Python学习 Day 9 property 多重继承 Mixin
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:
统计学家
2019/04/10
4080
python基础:面向对象-封装
例子:手机拨打电话,背后的实现是一个很复杂的流程: 1、手机内部功能实现 2、信号与基站进行交互 3、手机对收到的信号进行解码 4、调用手机听筒,将收到的信号实时解码并转化为音频,实现通话。 但是在实际使用中,使用者只需要输入号码拨打电话就可完成通话。
用户7886150
2020/12/19
6950
Python类的封装教程
封装的本身意思其实就和闭包函数一样,就是把一个函数和变量全都包在一起,但其实这样的说法不是很具体,就是一种很片面的解释
Python学习者
2023/01/02
9110
python基础七
__person表示静态私有属性,在外部同样获取不到。在属性前加上__表示封装变成私有属性,在外部是不能调用的。只能在内部使用,我们再在Person中添加一个方法,用这个方法获取就可以了。
不断折腾
2019/09/23
4300
浅析Python装饰器中的@property
定义了一个 Exam 类,为了避免直接对 _score 属性操作,提供了 get_score 和 set_score 方法,这样起到了封装的作用,把一些不想对外公开的属性隐蔽起来,而只是提供方法给用户操作,在方法里面,可以检查参数的合理性等。
Go进阶者
2021/04/13
6200
浅析Python装饰器中的@property
说说Python中的property
最近在项目中,发现项目越来越大之后,之前的编写方式会留下很多坑,因此最近专门研究了一下静态语言中的方法,比如java中的bean这玩意,发现这种方式引入后,可以很有效的解决这类问题。
点点寒彬
2020/03/18
5600
Python:@property装饰器的使用
Python内置的@property装饰器就是负责把一个方法变成属性调用的 Python允许我们在程序中手动设置异常,使用 raise 语句即可 把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作
用户7886150
2021/01/22
6140
Python面试题之Python面向对象编程汇总
面向对象的设计思想是从自然界中来的,因为在自然界中,类(Class)和实例(Instance)的概念是很自然的。Class是一种抽象概念,比如我们定义的Class——Student,是指学生这个概念,而实例(Instance)则是一个个具体的Student,比如,Bart Simpson和Lisa Simpson是两个具体的Student。
Jetpropelledsnake21
2019/02/15
1.8K0
神奇的Python property装饰器:1行代码让Python方法秒变属性
这段代码的主要功能就是通过word方法返回一个字符串。而最后一行直接访问了word方法。在Python语言中,任何东西都可视为对象,方法也不例外。所以直接输出了word方法的对象形式。
蒙娜丽宁
2021/04/19
1.2K0
神奇的Python property装饰器:1行代码让Python方法秒变属性
Python中的property类和@property装饰器
在Python的类中,为了避免使用者直接在类的外部操作属性和方法,我们可以将属性和方法设置成私有属性和私有方法。
Python碎片公众号
2021/02/26
1K0
Python中的property类和@property装饰器
python 面向对象技巧 @property
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:
葫芦
2019/04/17
4630
Python类属性装饰器使用技巧
在Python中,装饰器是一个强大而灵活的工具,用于修改函数或方法的行为。对于类属性,Python也提供了装饰器,使得我们可以对类的属性进行控制和管理。类属性装饰器可以用于数据验证、懒加载、计算属性等场景。本文将详细介绍Python类属性装饰器的概念、用法及其实际应用,并通过示例代码帮助全面掌握这一重要工具。
sergiojune
2024/07/12
2220
Python类属性装饰器使用技巧
Python3.6学习笔记(三)
面向对象编程 Object Oriented Programming 简称 OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
大江小浪
2018/09/19
3960
Python3.6学习笔记(三)
Python: 面向对象编程(类和对象)
文章背景: 最近在学习课程Python-Core-50-Courses,其中有个章节是面向对象编程,涉及的内容是类(class)和对象。下面对所学的内容进行相应的整理。
Exploring
2022/09/20
5290
面向对象(二)【类的成员及修饰符】
在上述类的成员中,普通字段是存储在对象之中的;其他成员均是存储在类中,也就是说无论创建了多少个对象,对象本身只保留成员中的普通字段,其他成员均存储在类中。
用户1432189
2018/09/05
4990
面向对象(二)【类的成员及修饰符】
私有化、多态和单例模式
其实__new__方法我一直不是很懂怎么用,也不知道是用来干嘛的,以后用到了再说吧
y191024
2022/09/20
3200
组合、封装、多态
继承:一种类与类的关系,一种什么是什么的关系,子类是父类的从属关系。 组合:对象与对象的关系,一种什么有什么的关系,一个对象拥有另一个对象。 组合优点:让类与类之间解耦,可扩展性高 组合的缺点:编写复杂度高 继承优点:编写复杂度低 继承缺点:耦合度高
GH
2019/12/12
5770
相关推荐
Python @property
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验