Python基础语法-03-私有化

私有化

Python中属性的分类

在Java中可以通过private关键字定义私有变量,Python中则通过变量名定义的格式来区分变量的访问权限

Python的类中,可以定义5种形式的变量,其功能各不相同,它们的区分依靠变量名的定义格式(Java转过来的表示这个真的很吓到我了)

格式 分类
xx 公有变量
_xx 私有属性或⽅法
__xx 私有属性或⽅法
__xx__ 魔法对象或属性,写程序时不能定义这种类型的方法或属性
xx_ 普通变量,⽤于避免与Python关键词冲突

_xx__xx 的区别

_xx__xx 都是私有方法和属性的定义格式,但是它们有微小的不同,_xx 格式定义的私有方法属性不能通过from somemodule import * 的方法导入模块,但如果使用import somemodule 的方式导入模块,则两者的效果相同

私有属性和方法能够做到使得外部不能访问的原因是Python解释器在私有方法属性定义后对其做了名称重整,就是把他们的名字做了简单的修改使得在外部因为名称不同而无法调用

property关键字的使用

getter,setter方法

对于类中定义的私有变量,一般会定义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:不是整型数字")

m = Money
m.setMoney(m,5)
print(m.getMoney(m))

这里写图片描述

使用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:不是整型数字")

    #添加一条property语句
    money = property(getMoney, setMoney)

m = Money
m.money = 5
print(m.money)

使用property语句后,就不需要调用getter,setter方法即可取值和赋值了,对私有属性的访问就简化了

使用property装饰器

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:不是整型数字")

m = Money
m.money = 5
print(m.money)

使用property装饰器,方法的定义可以简化

猜你喜欢

转载自blog.csdn.net/eagleuniversityeye/article/details/80136985