python 简单理解常见的魔法方法:init,str,del,mro

python 简单理解常见的魔法方法:init,str,del,mro

魔法方法:方法名前后都有两个下划线,这样的方法称为魔法方法
特点:当需要完成某种操作的时候自动调用的方法

init
1.当对象创建完成后,会自动调用该方法,给对象进行初始化(给对象添加属性)
2.以后关于给对象添加属性的操作统一在该方法里面完成,提高代码的复用性
举例:

class Person(object):
		#当Person对象创建完成后会自动调用该方法给对象添加属性
		def __init__(self):
			self.name='李四'
			self.age = 20
		def show_info(self):
			print(self.name,self.age)

	p1 = Person()
	p1.show_info()

	p2 = Person()
	p2.show_info()

注释:1.一个类可以创建多个对象,而这多个对象是不同的对象
2.self只是方法的一个参数,可以修改self的名字,但是一般不修改时默认的,self可以动态获取不同对象身上的属性信息,self表示调用当前方法时的对象,也就是说,哪个对象调用了self,self就是哪个对象

以上案例会导致对象的属性被写死,下面这个案例解决属性值被写死的情况

class Person(object):
	def __init__(self,name,age):
		self.name = name
		self.age = age
	def show_info(self):
		print(self.name,self.age)

p1 = Person('王五',27)
此处使用位置参数进行传参的,也可以用关键字进行传参,此处不用给self传参,因为在创建对象的时候解释器会自动把创建的对象传给self
p1.show_info()

str
1.当使用print函数输出对象属性的时候会自动调用该方法,以字符串的形式返回对象的属性
2.正常情况下获取对象的属性信息,需要调用类里面的方法,但是现在可以直接使用str魔法方法返回字符串类型的对象属性值

class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return '姓名:%s 年龄:%d' % (self.name,self.age)
#会调用init
p1 = Person('王五',27)
print(p1)

del
1.当前对象被销毁的时候自动调用该方法,主要是验证对象是否被销毁
对象销毁的场景1.程序运行结束,程序中所使用到的数据对象会在内存中销毁
2.当内存中的数据对象没有变量使用的时候,该对象也销毁

提示:对象是否销毁是由引用计数来管理的,当引用计数为0时对象销毁
引用计数:对象的内存地址被变量使用的次数

mro
1.用以查看类的继承顺序
2.调用该方法的查找顺序是由类继续顺序来决定的,如果找到了某个方法,就不会在后续的类中查找了
3.会先查找本类,找不到的话再按继承的顺序

class Fish(object):
    def show1(self):
        print('show1')

class Animal(object):
    def show2(self):
        print('show2')

class Shark(Fish,Animal):
    def show3(self):
        print('show3')

p1 = Shark()
p1.show2()
result = Shark.__mro__
print(result)
(<class '__main__.Shark'>, <class '__main__.Fish'>, <class '__main__.Animal'>, <class 'object'>)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季布,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值