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-类与对象 如何创建可管理的对象属性 (图文并茂)