python魔法属性_Python魔法方法总结及注意事项

方法

描述

备注

1、基本方法

__new__(cls[,*argv])

1. __new__ 是在一个对象实例化的时候所调用的第一个方法

2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __init__ 方法

3. __new__ 决定是否要使用该 __init__ 方法,因为 __new__ 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 __new__ 没有返回实例对象,则 __init__ 不会被调用

4. __new__ 主要是用于继承一个不可变的类型比如一个 tuple 或者 string

cls:代表一个类的名称

self:代表一个实例对象的名称

__init__(self[,*argv])

构造器,当一个实例对象被定义时调用

类似于C++的构造函数

__del__(self)

析构器,当删除一个实例对象时调用

类似于C++的析构函数

__call__(self[,*argv])

允许一个类像函数一样被调用

class_x(a,b)实际调用的是class_x.__call__(a,b)

__len__(self)

获得实例对象的长度

与调用函数 len(obj)一样的结果

__repr__(self)

将实例对象转化为字符串的形式

如 ls=[1,2,3], 则repr(ls)为 '[1,2,3]',与函数repr(obj)功能相同

__str__(self)

将实例对象转化为字符串的形式

与repr()的区别在于:str(obj)的字符串是打印出来让人看的,更加亲民,而repr(obj)是给解释器看的;

若 a = xxx(列表、字典、元祖或集合等)

eval(repr(a)) == a 成立

eval(str(a)) == a 不一定成立

__int__(self)

定义当被 int() 调用时的行为

__float__(self)

定义当被 float() 调用时的行为

__round__(self[, n])

当被round()调用时的行为

round(digit[, n]) 将digit数字保留n位精度

__hash__(self)

定义能被 hash() 调用的行为

__bytes__(self)

定义被 bytes() 调用的行为

__bool__(self)

定义被 bool() 调用的行为

返回True(1) 或 False(0)

__format__(self, form)

定义被 format()调用的行为

2、运算符方法

__add__(self, other)

加法:+

__sub__(self, other)

减法:-

__mul__(self,other)

乘法:*

__truediv(self, other)

除法:/

注意是 truediv

__floordiv(self, other)

整数除法://

floor()即为向下取整的意思

__mod__(self, other)

求余:%

__pow__(self, other[, mod])

乘方:**

pow(x,y[,z]),

若无Z,则为 return x**y

若有Z,则为 return x**y%z

__divmod__(self, other)

divmode()

返回值为元祖 (商值,余数)

__lshift__(self, other)

左移:<<

__rshift__(self, other)

右移:>>

__and__(self, other)

按位与:&

注意以下均为按位操作,非逻辑操作

__or__(self, other)

按位或:|

__xor__(self, other)

按位异或:^

3、反运算符方法

__radd__(self, other)

加法,如a+b,当a不支持__add__()操作时,调用此函数;

即在运算符的基础上加上 'r' 即可,以下雷同

__rsub__(self, other)

other - self

…………

4、增量赋值运算符方法

__iadd__(self, other)

赋值加法:+=

即在赋值运算符之前加 'i' ,以下雷同

__isub__(self, other)

赋值减法:-=

self = self - other

…………

5、一元操作符方法

__pos__(self)

定义正号:+x

__neg__(self)

定义负号:-x

__abs__(self)

取绝对值

__invert__(self)

按位求反:~x

6、比较操作符方法

__gt__(self, other)

大于:>

__ge__(self, other)

大于等于:>=

__lt__(self, other)

小于:<

__le__(self, other)

小于等于:<=

__eq__(self, other)

相等:==

__ne__(self, other)

不等:!=

7、属性操作

__getattr__(self, name)

当用户访问一个不存在的属性时调用

注意 object/super() (所有类的基类) 是无该方法的

__getattribute(self, name)

访问存在的属性时调用

先调用此函数,如找不到该属性,再去调用上面的属性

__setattr__(self, name, value)

设置属性时调用

__delattr__(self, name)

删除一个属性时调用

property(fget=None, fset=None, fdel=None, doc=None)

是一个类,主要功能是为了方便类内部函数的调用

class C(object):

def getx(self): return self._x

def setx(self, value): self._x = value

def delx(self): del self._x

x = property(getx, setx, delx, "I'm the 'x' property.")

>>> c=C()

>>> c.x=10

>>> c.x

10

__get__(self, instance, owner)

描述符被访问时调用

想详细了解,请点击这里

__set__(self, instance, value)

描述符被改变时调用

__delelte__(self, instance, value)

删除描述符时调用

8、容器类型操作

__len__(self)

求容器的大小(注意与capacity的区别)

可变和非尅便容器均具备 __len__ 和 __getitem__

__getitem__(self, key)

获取容器中指定元素的行为

__setitem__(self, key, value)

设置容器中指定元素的行为

只有可变容器拥有 __setitem__ 和 __delitem__

__delitem__(self, key)

删除容器中指定元素的行为

__iter__(self)

定义迭代器中元素的行为

__reversed__(self)

当调用reversed()函数时

__contains__(self, item)

成员运算符in/ not in的行为

PS: ①.以上所有的魔法方法,君采用__xx__形式(__为双 "_",双下划线)

②.以上魔法方法为Python解释器自动调用,当然也可以手动调用

③.魔法方法Python解释器自动给出默认的,因此除非需要改变其内部功能,其它时刻刻使用默认魔法方法

④.魔法方法是针对class而言的,脱离了”类“谈magic_method是没有意义的

⑤.*argv为可变的参数列表,类似C语言的va(variable argument),注意与指针的区别,python中暂时忘掉指针,因为python的内存机制都是解释器自动完成的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值