python(魔术方法)

本文详细介绍了Python中的魔法方法,包括构造和析构方法(new, init, del)、算术运算重载、属性访问及一些常用魔术方法的作用和使用示例,帮助读者理解并掌握Python对象的内部工作机制。" 117292179,10547913,Android Spinner控件实现下拉搜索功能,"['Android开发', 'UI组件', '适配器']
摘要由CSDN通过智能技术生成

魔法方法

https://fishc.com.cn/forum.php?mod=viewthread&tid=48793&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403)
1.构造和析构

  1. new 是在一个对象实例化的时候所调用的第一个方法
  2. 它的第一个参数是这个类,其他的参数是用来直接传递给 init 方法
  3. new 决定是否要使用该 init 方法,因为 new 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 new 没有返回实例对象,则 init 不会被调用
    定义:魔法方法总是被双下划线包围
    特征:总能在适当的时候被自动调用
    1.init(self)
    构造方法,实例化对象时,会首先被调用
    Eg:class CC:
    Def init (self, x, y):
    Self.x = x
    Self.y = y

Self.x:类实例化对象的局部变量
X:实例化对象时传的参数
注意:new有返回值,构造函数(init)没有返回值
2.new(cls[,…])
含义:对象实例化时调用的方法,和其他魔术方法不同,第一个参数是class,在init()之前被调用,返回class类的实例对象(一般情况下很少去重写new方法,当继承一个不可变的类时,又需要进行修改的时候才会重写)
Eg:
class String1(str):
def new(cls, string):
string = string.upper()
return str.new(cls, string)
a = String1(“hello python”)
print(a)
实行结果:
HELLO PYTHON
3.del(self) 析构器(垃圾回收机制)
Del x != x.del() 是不相等的
Eg:
class String1(str):
def new(cls, string):
print(“new”)
string = string.upper()
return str.new(cls, string)
def init(self,x):
print(“init”)
def del(self):
print(“del”)
a = String1(“hello python”)
b = a
c = a
d = a
del c
del b
del d
print(a)
del a
实行结果:
new
init
HELLO PYTHON
del
结论|:类中魔法方法调用顺序:new->init->del
在创建实例化对象a的同时,将a的引用给类b,c,d,使用del删除这些引用时候,不会调用类对象中的__del__(self)函数,在最后程序结束时才会调用类对象的__del__(self)函数
Eg:
class String1(str):
def new(cls, string):
print(“new”)
string = string.upper()
return str.new(cls, string)
def init(self,x):
print(“init”)
def del(self):
print(“del”)
a = String1(“hello python”)
b = a
c = a
d = a
del c
del b
del d
print(a)
del a #真正删除实例化对象a
print(a)

new
init
del
2.算术运算:魔法方法提供了自定义对象的数值处理,通过对魔法方法的重写,自定义任何对象间的算术运算
a = int(“123”)
b = int(“456”)
解析:类对象int通过参数“123”,”465”实例化一个对象,赋值给a,b
a + b = 579(对象还可以进行算术运算)
1.算术运算
class Add(int):
def add(self, other): # 重写类int中的魔法方法add
return int.add(self, other) # 返回类int中的魔法方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值