鱼C论坛

 找回密码
 立即注册
查看: 2018|回复: 2

[技术交流] 39 魔法方法:构造和析构 - 景命

[复制链接]
发表于 2017-8-28 19:09:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
知识点:

魔法方法总是被双下划线包围,例如__init__()
魔法方法是面向对象的Python的一切,如果你不知道魔法方法,说明你还没意识到面向对象的Python的强大。
魔法方法的“魔力”体现在他们总能够在适当的 时候被自动调用。


魔法方法:
1.__init__(self[, ...])

        #构造方法。在实例化对象的时候被调用。
                参数:self是实例对象。后面跟的是实例对象的参数。
                返回值:None
        例:
                # 我们定义一个矩形类,需要长和宽两个参数,拥有计算周长和面积两个方法。
                # 我们需要对象在初始化的时候拥有“长”和“宽“两个参数,因此我们需要重写__init__()方法
                # 因为我们说过,__init__()方法是类在实例化成对象的时候首先会调用的一个方法,大家可以理解吗?
  1. >>> class Rectangle:
  2.         def __init__(self,x,y):
  3.                 self.x = x
  4.                 self.y = y
  5.         def getPeri(self):
  6.                 return (self.x + self.y) * 2
  7.         def getArea(self):
  8.                 return self.x * self.y

  9. >>> rect = Rectangle()
  10. >>> rect.getArea()
  11. 12
  12. >>> rect.getPeri()
  13. 14
复制代码



2.__new__(cls[, ...])
        #在实例化对象时第一个被调用的方法。一般不会重写,但是当前类继承了一个不可变类型又必须修改的时候。
                参数:cls表示这个类。后边的参数会原封不动的传给__init__()方法。
                返回值:必须返回一个实例对象,通常是class这个类的实例对象。当然也可以返回别的类的实例对象。
        例:
  1. >>> class CapStr(str):
  2.         def __new__(cls,string):                        #重写__new__()方法,设置一个string参数。
  3.                 string = string.upper()                #将string参数改变为全部大写,并重新赋值。
  4.                 return str.__new__(cls,string)        #返回父类的__new__()方法。

  5. >>> a = CapStr("I love Fishc.Com")
复制代码



3.__del__(self)
        #析构(销毁)对象时自动调用的方法。注意:del x != x.__del__()。
                参数:实例对象。
        例:

  1. >>> class C:
  2.         def __init__(self):
  3.                 print("我是__init__()方法,我被调用了...")
  4.         def __del__(self):
  5.                 print("我是__del__()方法,我被调用了...")

  6.                
  7. >>> c1 = C()
  8. 我是__init__()方法,我被调用了...
  9. >>> c2 = c1
  10. >>> del c2
  11. >>> del c1
  12. 我是__del__()方法,我被调用了...
  13. >>> c1 = C()
  14. 我是__init__()方法,我被调用了...
  15. >>> del c1
  16. 我是__del__()方法,我被调用了...
复制代码

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-6 21:24:42 | 显示全部楼层
rect = Rectangle(3,4)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 09:29:07 | 显示全部楼层
总结的不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表