Python高级编程-元类编程

一、property属性

class People:
	def __init__(self,name):
		self.__name=name
	@property
	def name(self):
		return self.__name
	@name.setter
	def name(self,value):
		self.__name=value

二、__getattr__和__getattribute__区别

__getattr__是在找不到属性的时候会进入到该魔法方法
__getattribute__是需要寻找属性的时候先进入该魔法方法

三、属性描述符和属性查找过程

属性描述符:
1、数据属性描述符
		__get__、__set__、__delete__
2、非数据属性描述符
	__get__
属性查找过程
有一个User类、查找实例user.age
1、调用__getattribute__
2、__get__发生在__getattribute__中
3、如果age在类中或者类的基类中,且age是数据描述符、优先调用数据描述符的__get__
4、age在实例的__	dict__中,直接返回user.__dict__['age']
5、age在类中或者基类的__dict__中
5.1、age是非数据描述符、调用非数据描述符的__get__
5.2、返回User.__dict__['age']
6、__getattribute__抛出AttributeError,进入__getattr__

四、__new__和__init__区别

__new__创建实例
__init__完善实例

五、元类

创建类的类叫做元类、type就是元类
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值