python-类与对象 如何创建可管理的对象属性 (图文并茂)

python-类与对象 如何创建可管理的对象属性 (图文并茂),第1张

python-类与对象 如何创建可管理的对象属性 (图文并茂)

创建可管理的对象属性
    • 问题描述
    • 实现需求
    • 类装饰器@property
    • property()函数

问题描述
  • 在面向对象编程中,我们把方法看作对象的接口
  • 直接访问对象的属性可能是不安全的,或在设计上不够灵活,但是使用调用方法在形式上不如直接访问属性简洁
  • 如下举例:
# 调用方法(繁琐)
# 获取数据
person.get_age()
# 设置数据
person.set_age(18)
  • 我们是否能实现在形式上是属性访问,但是实际上却是内部调用方法?保证即安全也简洁!!
实现需求
  • 定义类AgeDemo
  • 通过访问器获取年龄
  • 通过设置器设置年龄
  • 年龄不是int类型则主动抛出异常
  • 我们先来看看最基本的实现:
# 基本写法
class AgeDemo(object):

    def __init__(self):
        self.age = None

    # 获取数据
    def get_age(self):
        return self.age

    # 设置数据
    def set_age(self, age):
        if not isinstance(age, int):
            raise TypeError('type error')
        self.age = age


ycx = AgeDemo()
ycx.set_age(18)  # 设置数据
print(ycx.get_age())  # 获取数据
  • console输出:
  • 下面就介绍两种方法来实现上述的目标!!
类装饰器@property
  • 参数:
  • fget – 获取属性值的函数
  • fset – 设置属性值的函数
  • fdel – 删除属性值函数
  • doc – 属性描述信息
  • 代码示例:
# 装饰器@property写法
class AgeDemo(object):

    def __init__(self):
        self.age = None

    @property
    def get_age(self):
        return self.age

    @property
    def set_age(self, age):
        if not isinstance(age, int):
            raise TypeError('type error')
        self.age = age


ycx = AgeDemo()
ycx.age = 18
print(ycx.age)
property()函数
  • 参数列表:
class property([fget[, fset[, fdel[, doc]]]])
  • 使用property()函数实现:
# property()函数写法
class AgeDemo(object):
    def __init__(self):
        self.age = None

    def get_age(self):
        return self.age

    def set_age(self, age):
        if not isinstance(age, int):
            raise TypeError('type error')
        self.age = age

    Age = property(get_age, set_age)


ycx = AgeDemo()
ycx.Age = 18
print(ycx.Age)
  • 上述的两种方法都可以实现创建可管理的对象属性!!!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5679940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存