首页 python基础教程 Python面向对象-内置特殊方法实现描述器
pay pay

Python面向对象-内置特殊方法实现描述器

日期: 2021年12月7日 15:15
栏目: python基础教程
阅读: 81
作者: python自学网

摘要: 在函数中也讲过描述器这个概念,类方法中也能实现,描述器本身也是一个对象,想实现描述器功能有两种方法,下面来分别演示一下。

在函数中也讲过描述器这个概念,类方法中也能实现,描述器本身也是一个对象,想实现描述器功能有两种方法,下面来分别演示一下。

1.方法1:property

描述器是一个对象,通过__set__();__get__();__delete__()三个方法组成一个对象实现对特定数据的处理和筛选等功能。

class Dog(object):
    def __init__(self):
        self.__age = 18

    def get_age(self):
        return self.__age

    def set_age(self, val):
        if val < 0:
            val = 0
        self.__age = val

    def del_age(self):
        del self.__age

    age = property(get_age, set_age, del_age)  # 这里的age就是一个描述器

d = Dog()
d.set_age(-5)
print(d.get_age())

返回结果:0

2.定义方式2:通过一个类封装描述器

class Age:
    def __get__(self, instance, owner):
        print('get', instance, owner)

    def __set__(self, instance, value):
        # print('set', instance, value)

        if value > 19:
            print('aaa')
        else:
            print('111')

    def __delete__(self, instance):
        print('del', instance)


class Dog:
    age = Age()  # 把描述器直接赋值个属性


d = Dog()
d.age = 5  # 调用描述器中的set
print(d.age)  # 调用描述器中的get

返回结果:

111
get <__main__.Dog object at 0x00000000021C5D30> <class '__main__.Dog'>
None

目录
回顶部