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

Posted 温柔且上进c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-类与对象 如何创建可管理的对象属性 (图文并茂)相关的知识,希望对你有一定的参考价值。

创建可管理的对象属性

问题描述

  • 在面向对象编程中,我们把方法看作对象的接口
  • 直接访问对象的属性可能是不安全的,或在设计上不够灵活,但是使用调用方法在形式上不如直接访问属性简洁
  • 如下举例:
# 调用方法(繁琐)
# 获取数据
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)
  • 上述的两种方法都可以实现创建可管理的对象属性!!!

以上是关于python-类与对象 如何创建可管理的对象属性 (图文并茂)的主要内容,如果未能解决你的问题,请参考以下文章

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

python_如何创建可管理的对象属性

Python 类与对象

Python 简明教程 --- 19,Python 类与对象

Python 3.5(类与对象)

Python 类与对象