【python基础】十二、python 面向对象 私有化

私有化

  • 封装
  1. 私有化属性
  2. 定义公有的set、get
  • 优点
    • 进行set为私有变量赋值时,可以判断是否合法
普通私有化
# 私有化

class Person(object):
    # __age = 18

    def __init__(self, name, age):
        self.__name = name  # 私有化 外界无法修改
        self.__age = age

    # 定义公有的set get 方法:赋值 取值
    def setAge(self, age):
        if age > 0 and age < 120:
            self.__age = age
        else:
            print('输入age 年龄参数 不合法')

    def setName(self, name):
        if isinstance(name, str):
            self.__name = name
        else:
            print('请输入string类型的名字')

    def getName(self):
        return self.__name

    def getAge(self):
        return self.__age

    def __str__(self):
        return '姓名:{} 年龄:{}'.format(self.__name, self.__age)


jam = Person('尚尚', 20)

# print(jam.__age)      # 无法访问私有
# jam.__age = 21      # 修改失败

jam.setAge(99)
jam.setName('JamSang')

print(jam.getAge())

# dir() 显示的,均可以 通过 .方法调用
print(dir(Person))
print(dir(jam))
print(jam.__dir__())    # 同dir(jam)
# 并非真正的私有,仍可以访问,但不建议
print(jam._Person__age)
使用装饰器私有化

实际开发中的私有化处理: 装饰器

class Person(object):
    # __age = 18

    def __init__(self, name, age):
        self.name = name  # 私有化 外界无法修改
        self.__age = age

    def setName(self, name):
        if isinstance(name, str):
            self.name = name
        else:
            print('请输入string类型的名字')

    def getName(self):
        return self.name

    # 使用装饰器来进行私有化
    @property  # 这是个类 做的装饰器
    def age(self):      # 功能同getAge,可以直接调用
        return self.__age

    # @property.setter
    @age.setter         # 此处age是上面@property装饰的age,功能同 set
    def age(self, age):
        if 0 < age < 120:
            self.__age = age
        else:
            print('输入age 年龄参数 不合法')

    def __str__(self):
        return '姓名:{} 年龄:{}'.format(self.name, self.__age)

jam = Person('Jam', 18)
print(jam.age)
jam.age = 20
print(jam.age)

在b站学习中

个人主页

学习链接

欢迎 批评 指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值