Python魔法方法剖析

一、更正概念

首先必须强调一下国内很多翻译为魔法函数是不严谨的,正确应为魔法方法(magic method),因为魔法方法都是定义在类中的。

二、关于调用

魔法方法并不是都能自动调用的,刚开始接触魔法方法的时候产生了这样一个误解,以为所谓的魔法所具有的魔力是能够自动调用,然而我错了。少部分能够自动调用,大部分是需要特定条件的触发

2.1 自动调用

class People(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('Hello, my name is:',name,'and my age is:',age)
        return
     def sayHello(self):
        print('Hello, my name is',self.name)

p1 = People("Tandy", 30) #这里不需要主动调用p1.__init__方法,俗称构造方法,这里是默认自动调用的
p1.sayHello() #但这个方法必须主动调用才能执行

2.2 触发调用

像__str__()则属于触发调用,在打印对象print(obj)时,即触发调用__str__方法,而普通方法str(),如果不主动调用则不会执行。下面用魔法方法__str__()和普通方法str()的执行效果对比看一下:

代码1:

class People(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
       # return

    def __str__(self):
        return self.name + ":" + str(self.age)

p1 = People("Tandy",30)
print(p1)#触发调用魔法方法

代码1输出:Tandy:30

代码2:

class People(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
       # return

    def str(self):
        return self.name + ":" + str(self.age)



#if __name__=="__main__":
p1 = People("Tandy",30)
print(p1)  #输出对象的内存地址

代码2输出: <__main__.People object at 0x0000015E02EE3390>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值