python learning day13

魔方方法也叫魔术方法也叫特殊方法,总之不是一般的方法。它们是一些可以让你对类添加“魔法”的特殊方法。 它们经常是两个下划线包围来命名的(比如 initlt )。

构造和初始化的魔方方法

实际上当x=class1()时,__init__并不是第一个被调用的方法,__new__是第一个,__new__ (cls,[...)第一个参数是这个类,其他的是传给__init__的.所以当x=class1()时()中的所有参数都会给__init __ .相对应的 __ del __可以实现析构的作用,它可以将当解释器退出时还存在的对象删除掉.

用于比较的魔方方法

eq(self, other) 定义了等号的行为, == 。
调用x.__ eq __(y)
ne(self, other) 定义了不等号的行为, != 。

lt(self, other) 定义了小于号的行为, < 。调用x.__ lt __()

gt(self, other) 定义了大于等于号的行为, >=
Python其实可以通过魔术方法来实现封装。

访问属性控制

getattr(self, name)

该方法定义了你试图访问一个不存在的属性时的行为。因此,重载该方法可以实现捕获错误拼写然后进行重定向, 或者对一些废弃的属性进行警告。

setattr(self, name, value)

setattr 定义了你对属性进行赋值和修改操作时的行为。不管对象的某个属性是否存在,它都允许你为该属性进行赋值,因此你可以为属性的值进行自定义操作。
delattr(self, name)
__delattr__与__setattr__很像,只是它定义的是删除属性时的行为。实现__delattr__是同时要避免"无限递归"的错误。
getattribute(self, name)
__getattribute__定义了属性被访问时的行为,相比较,__getattr__只有该属性不存在时才会起作用。
因此,在支持__getattribute__的Python版本,调用__getattr__前必定会调用 getattributegetattribute__同样要避免"无限递归"的错误。
需要提醒的是,最好不要尝试去实现__getattribute
,因为很少见到这种做法,而且很容易出bug。

你可能感兴趣的:(python基础学习)