zoukankan      html  css  js  c++  java
  • Python 中property & eval()的妙用

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

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

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

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

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

    2、Python 代码实现:

    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)。

    欢迎关注【无量测试之道】公众号,回复【领取资源】,
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     添加关注,让我们一起共同成长!

  • 相关阅读:
    android 自定义动画4 RotateAnimation源码分析
    Android 绘图 阴影制作(Shadow)
    view, surfaceView, invalidate, postInvalidate, 刷新屏幕
    android database 常用字段描述
    Android标题栏进度指示器使用
    ThumbnailUtils Android2.2新增类
    Android 重力感应 测试代码
    Android中内嵌字体实现个性化
    Android中悬浮窗口
    Android布局Java代码构造法
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/14349474.html
Copyright © 2011-2022 走看看