python进阶:私有化

Posted python-road

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python进阶:私有化相关的知识,希望对你有一定的参考价值。

私有化

Python并没有真正的私有化支持,但可用下划线得到伪私有。   尽量避免定义以下划线开头的变量!
(1)_xxx      "单下划线 " 开始的成员变量叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,
需通过类提供的接口进行访问;不能用‘from module import *‘导入

(2)__xxx    类中的私有变量/方法名 (Python的函数也是对象,所以成员方法称为成员变量也行得通。),
" 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。

(3)__xxx__ 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init__()代表类的构造函数。

小结:

  • 父类中属性名为__名字的,子类不继承,子类不能访问
  • 如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性
  • _名的变量、函数、类在使用from xxx import *时都不会被导入

Property

1.使用property升级getter和setter方法

class Money(object):
    def __init__(self):
        self.__money = 0

    def getMoney(self):
        return self.__money

    def setMoney(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整型数字")
    money=property(getMoney,setMoney)
a=Money()
a.money=100
print(a.money)

2.使用property取代getter和setter方法

Python内置的@property装饰器就是负责把一个方法变成属性调用的

@property成为属性函数,可以对属性赋值时做必要的检查,并保证代码的清晰短小,主要有2个作用

  • 将方法转换为只读
  • 重新实现一个属性的设置和读取方法,可做边界判定
class Money(object):
    def __init__(self):
        self.__money = 0

    @property
    def money(self):
        return self.__money

    @money.setter
    def money(self, value):
        if isinstance(value, int):
            self.__money = value
        else:
            print("error:不是整型数字")
a=Money()
print(a.money)

 

以上是关于python进阶:私有化的主要内容,如果未能解决你的问题,请参考以下文章

学习Python基础--------6面对对象进阶

如何管理在每个 git 版本中添加私有代码片段?

Python进阶编程 类的成员

大数据攻城狮之进阶技能-Github的使用

Python入门自学进阶——6--类与对象-成员修饰符特殊成员及元类

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情