首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python知识点小结 5

01

__魔法方法__

什么是魔法方法:从表现上来看,它是不需要调用函数,写出函数名,传入参数才能执行的方法,而是在进行某一操作时根据操作内容自动执行的方法

__init__(self[, ...]):初始化,在实例化时自动调用的方法,当有需要从外部传入的属性值时,__init__必须存在,被重写。该方法不可存在返回值。

__new__(class[,...]):实例化过程中第一个执行的方法,一般不用重写,除非一个类继承不可变类。

__del__(self):对象销毁时自动调用,当变量取消时用于删除内存中的垃圾

python无处不对象,int,string...各种类型都是对象,int类里面内置许多算术魔法方法:

__add__(self,other) __sub__(self,other) __mul__(self,other)

__truediv__(self,other) __floordiv__(self,other)等

当我们重写这些算术方法时,形成新的类,'新类+新类' 的表现不会和 1+1相同,这属于多态,因此:

class Myint(int):

def __add__(self,other):

return self + other

相当于对自身的无限递归,不会得到想象的结果

class Myint(int):

def __add__(self,other):

return int(self) + int(other)

这才是正确的结果

属性访问的方法:

1):直接 a.attribution访问

2):使用方法getattr(a,attribution,prompt)

3):使用property访问,x = property(getSize,setSize,delSize)

设置属性也可能掉入死循环的陷阱:

如:

class Rectangle:

def __init__(self,height=0,width=0):

self.height = height //为属性赋值的时候自动调用

self.width = width //方法__setattr__

def __setattr__(self,name,value):

# self.name = value //由于重写了__setattr__,

# 正确的方法 //此时的=已经不能发挥预期的效果陷 super.setattr(name,value) //入死循环

转自鱼C工作室

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180818G1D5KE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券