资讯专栏INFORMATION COLUMN

私有化规则与属性Property

whjin / 1232人阅读

摘要:上一篇文章装饰器真正入门的鉴定标准下一篇文章垃圾回收详解私有化变量定义规则变量形式解读公有变量单前置下划线,私有化属性或方法,禁止导入,类对象和子类进可以访问。双前置下划线,避免与子类中的属性命名冲突,无法再在外部直接访问。

上一篇文章:Python装饰器:python真正入门的鉴定标准
下一篇文章:Python垃圾回收详解
1、私有化

变量定义规则

变量形式 解读
xx 公有变量xx
_xx 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类进可以访问。
__xx 双前置下划线,避免与子类中的属性命名冲突,无法再在外部直接访问。
__xx__ 双前后下划线,python自定义使用的的属性或者方法名称,例如__init__,不要自定义这种名称的变量
x_ 单后置下划线,避免与Python关键词冲突
2、属性Property

私有属性添加getter和setter方法

实例:

class Man():
    def __init__(self):
        self.__age=18
    def getAge(self):
        return self.__age
    def setAge(self,value):
        #isinstance用来判断一个对象是不是指定类型
        #下面语句就是用来判断value是不是int类型
        if isinstance(value,int):
            self.__age=value
        else:
            print("输入的年龄不是整数")

if __name__=="__main__":
    mark=Man()

    mark.setAge("xxx")
    print(mark.getAge())
    mark.setAge(20)
    print(mark.getAge())

    #下面一句会报错
    #print(mark.age)

结果:

输入的年龄不是整数
18
20

使用property升级getter和setter方法

实例:

class Man():
    def __init__(self):
        self.__age = 18

    def getAge(self):
        return self.__age

    def setAge(self, value):
        # isinstance用来判断一个对象是不是指定类型
        # 下面语句就是用来判断value是不是int类型
        if isinstance(value, int):
            self.__age = value
        else:
            print("输入的年龄不是整数")
    age=property(getAge,setAge)


if __name__ == "__main__":
    mark = Man()

    mark.age="xxx"
    print(mark.age)
    mark.age=20
    print(mark.age)

结果:

输入的年龄不是整数
18
20

使用property取代getter和setter方法

实例:

class Man():
    def __init__(self):
        self.__age = 18

    @property
    def age(self):
        return self.__age
    @age.setter
    def age(self,value):
        # isinstance用来判断一个对象是不是指定类型
        # 下面语句就是用来判断value是不是int类型
        if isinstance(value, int):
            self.__age = value
        else:
            print("输入的年龄不是整数")


if __name__ == "__main__":
    mark = Man()

    mark.age="xxx"
    print(mark.age)
    mark.age=20
    print(mark.age)

结果:

输入的年龄不是整数
18
20

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42260.html

相关文章

  • Python中的动态属性和特性

    摘要:一利用动态属性处理数据源属性在中,数据的属性和处理数据的方法统称属性。处理无效属性名在中,由于关键字被保留,名称为关键字的属性是无效的。内置函数列出对象的大多数属性。点号和内置函数会触发这个方法。 导语:本文章记录了本人在学习Python基础之元编程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、了解如何利用动态属性处理数据;2、掌握Pyth...

    scola666 评论0 收藏0
  • @ConfigurationProperties 注解使用姿势,这一篇就够了

    摘要:在项目中,为满足以上要求,我们将大量的参数配置在或文件中,通过注解,我们可以方便的获取这些参数值使用配置模块假设我们正在搭建一个发送邮件的模块。这使得在不影响其他模块的情况下重构一个模块中的属性变得容易。 在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或...

    SolomonXie 评论0 收藏0
  • @ConfigurationProperties 注解使用姿势,这一篇就够了

    摘要:在项目中,为满足以上要求,我们将大量的参数配置在或文件中,通过注解,我们可以方便的获取这些参数值使用配置模块假设我们正在搭建一个发送邮件的模块。这使得在不影响其他模块的情况下重构一个模块中的属性变得容易。 在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或...

    KoreyLee 评论0 收藏0
  • 从ES6重新认识JavaScript设计模式(五): 代理模式和Proxy

    摘要:此时,链家起到的作用就是代理的作用。验证代理构造函数第二个参数中的方法,可以很方便的验证向一个对象的传值。 1 什么是代理模式 showImg(https://segmentfault.com/img/remote/1460000015800706?w=1262&h=464); 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理...

    verano 评论0 收藏0
  • JavaScript 为什么要有 Symbol 类型

    摘要:也有类似的概念,它是根据传递的数据类型推断的。这个特性的名称被称为私有字段,虽然这不会使所有对象受益,但会使类实例的对象受益。警告中有一个功能会破坏代理的隐私。 showImg(https://segmentfault.com/img/bVbpL6y?w=800&h=456); Symbols 是 ES6 引入了一个新的数据类型 ,它为 JS 带来了一些好处,尤其是对象属性时。 但是,...

    lemanli 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<