栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么在定义为实例属性时未调用描述符?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么在定义为实例属性时未调用描述符?

这是因为描述符仅应定义为类属性,而不是实例属性:

从文档:

以下方法仅在包含该方法的类的实例(所谓的描述符类)出现在所有者类中( 描述符必须位于所有者的类字典或父类的父类的类字典中 )时适用。

为了使描述符也能与实例属性一起使用,您需要重写。

__getattribute__
方法
BusinessLogic
(尚未进行全面测试,但可以根据情况工作):

def __getattribute__(self, attr):        obj = object.__getattribute__(self, attr)        if hasattr(obj, '__get__'): return obj.__get__(self, type(self))        return obj

如果您有数据描述符,则还需要处理该

__setattr__
零件。

def __setattr__(self, attr, val):    try:        obj = object.__getattribute__(self, attr)    except AttributeError:        # This will be raised if we are setting the attribute for the first time        # i.e inside `__init__` in your case.        object.__setattr__(self, attr, val)    else:        if hasattr(obj, '__set__'): obj.__set__(self, val)        else: object.__setattr__(self, attr, val)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号