博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[py]数据描述符优先级
阅读量:4312 次
发布时间:2019-06-06

本文共 1209 字,大约阅读时间需要 4 分钟。

实例查找属性的顺序:

类属性 > 数据描述符 > 实例属性 > 非数据描述符 > __getattr__

类属性>数据描述符>实例属性

class Str:    def __get__(self, instance, owner):        print("执行: __get__")    def __set__(self, instance, value):        print("执行: __set__")    def __delete__(self, instance):        print("执行: __delete__")class A:    name = Str()    def __init__(self):        self.name = "mm"a = A()A.name = "maotai_class"  # 添加类属性print(a.name) # 1.优先打印类属性 2.其次打印数据描述符 3.最后打印实例属性

实例属性>非数据描述符

class Str:    def __get__(self, instance, owner):        print("执行: __get__")    # def __set__(self, instance, value):    #     print("执行: __set__")    # def __delete__(self, instance):    #     print("执行: __delete__")class A:    name = Str()a = A()a.name = "maotai"print(a.__dict__)--{'name': 'maotai'}
class Str:    def __get__(self, instance, owner):        print("执行: __get__")    def __set__(self, instance, value):        print("执行: __set__")    # def __delete__(self, instance):    #     print("执行: __delete__")class A:    name = Str()a = A()a.name = "maotai"print(a.__dict__)--执行: __set__{}

非数据描述符>找不到

class A:    def __getattr__(self, item):        print("触发__getattr__")a = A()a.xxx # 触发__getattr__

转载于:https://www.cnblogs.com/iiiiiher/p/8670185.html

你可能感兴趣的文章
HTTP协议
查看>>
HTTPS
查看>>
git add . git add -u git add -A区别
查看>>
apache下虚拟域名配置
查看>>
session和cookie区别与联系
查看>>
PHP 实现笛卡尔积
查看>>
Laravel中的$loop
查看>>
CentOS7 重置root密码
查看>>
Centos安装Python3
查看>>
PHP批量插入
查看>>
laravel连接sql server 2008
查看>>
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>