Python类常用的魔术方法

类的常用魔术方法:无需人为调用,基本是在特定的时刻自动触发,方法名被前后两个下划线包裹

__init__:构造函数。

__new__:对象实例化方法,其实这才是类里面第一个被调用的方法,在构造函数之前调用,之后才是__init__,只是这个比较特殊,一般不使用。

__call__:对象当函数的时候触发。

class A():
    def __init__(self,name = 0):
        print("哈哈,我是构造函数")

    def __call__(self):
        print("我是__call__函数")

a = A()
a()    #对象当函数使用,如果没有__call__函数会报错

__str__:当对象被当做字符串使用过的时候调用。

class A():
    def __init__(self,name = 0):
        print("哈哈,我是构造函数")

    def __str__(self):
        return "我只是一个例子"

a = A()
print(a)  #把对象当字符串使用

__repr__:返回字符串,跟__str__函数差不多。

以上都是属于操作类的

属性操作相关:

__getattr__:访问不存在属性的时候触发。

__setattr__:对成员属性进行设置的时候触发,有三个参数--

                         1,self用来获取当前对象

                         2,被设置的属性名称,以字符串形式出现

                         3,需要对属性名称设置的值

                       作用:进行属性设置的时候进行验证或者修改。注意:在该方法中不能对属性直接进行赋值操作,否则会陷入死循环

A():
    def __init__(self):
        pass
    def __setattr__(self, name, value):
        print("设置属性:{0}".format(name))
        self.name = value        #这句语句会导致死循环

a = A()
a.age = 18

所以为了避免死循环,规定统一调用父类魔法函数:

class A():
    def __init__(self):
        pass
    def __setattr__(self, name, value):
        print("设置属性:{0}".format(name))
        super().__setattr__(name,value)    #super函数调用父类,避免死循环

a = A()
a.age = 18

运算分类相关魔术方法:

__gt__:进行大于判断的时候触发的函数。

以上就是常用的一些魔术方法了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值