`
rockkyle
  • 浏览: 10766 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

python 魔法方法(一)

 
阅读更多

一、__init__和__del__

__init__主要是实例初始化, __del__相当于析构器

#/usr/bin/env python
#-*- coding:utf-8 -*-
class test(object):
#实例初始化
        def __init__(self):
                print "call __init__"
#析构器
        def __del__(self):
                print "call __del__"
t=test()

 

call __init__
call __del__

 init在实例化的时候调用,del在对象销毁时自动调用,一般类中都默认带有__del__不需要自己声明

二、  __new__和__init__

官网解释:
If __new__()  returns an instance of cls, then the new instance’s __init__() 
method will be invoked like __init__(self[, ...]), where self is the new instance
and the remaining arguments are the same as were passed to __new__().
如果__new__()返回cls的实例,则新实例的__init__()方法会像__init__(self[,...])调用,其中self是新实例,其他的参数和传给__new__()中的一样If __new__() does not return an instance of cls, then the new instance’s __init__() method will not be invoked.

如果 __new__()不返回实例,则__init__()不会被调用

1、__new__ 是在__init__之前被调用的特殊方法,不返回实例

class A(object):
        def __init__(self):
                print "call __init__"
        def __new__(self):
                print "call __new__"

a=A()——

 

call __new__

2、返回实例

class A(object):
        def __init__(self,x=0):
                print "call __init__"
                self.x=x
        def __new__(cls):
                print "call __new__"
#返回cls的实例
                return super(A,cls).__new__(cls)
a=A()

 

call __new__
call __init__

 2种方法刚好验证官网的解释,另外__init__只是用来将传入的参数初始化给对象,__new__很少用到,除非你希望能够控制对象的创建。

三、__call__

类中定义了__call__ ()方法,表明类可以作为方法被调用

class B(object):
#define __call__
        def __call__(self,x=0):
                print "call __call__()"
#value that the method returns
                return x
#instance
b=B()
#invoked as a method
b()
print b(1)

 

call __call__()
call __call__()
1

 可以看出作为方法调用时获得的返回值为__call__()中返回的值。

 

四、其他的一些基本的定制魔法方法

#/usr/bin/env python
#-*- coding:utf-8 -*-
#instance
class C(object):
#内建str()以及print语句
        def __str__(self):
                print "call __str__"
                return "class C __str__"
#内建repr()和操作符
        def __repr__(self):
                print "call __repr__"
                return "class C __repr__"
#内建unicode()
        def __unicode__(self):
                print "call __unicode__"
                return "call C __unicode__"
#内建bool()
        def __nozero__(self):
                print "call __nozeto__"

#内建len()
        def __len__(self):
                print "call __len__"
                return 1
c=C()
#首先 c 会调用__str__中的print
#print c 会答应__str__方法返回值
print c
#repr(c)的时候调用 __repr__方法中的print
#print repr(c)会打印__repr__方法的返回值
print repr(c)
#unicode(c)的时候调用 __unicode__方法中的print
#print unicode(c)会打印__unicode__方法的返回值
print unicode(c)
#len(c)的时候调用 __len__方法中的print
#print len(c)会打印__len__方法的返回值
print len(c)
#bool(c)的时候调用 __len__方法中的print
#print bool(c)如果len(c)为0则返回False,非0则为True
print bool(c)

 结果:

call __str__
class C __str__
call __repr__
class C __repr__
call __unicode__
call C __unicode__
call __len__
1
call __len__
True

 

分享到:
评论

相关推荐

    用Python画出一个魔法阵

    用Python画出一个魔法阵 turtle

    python魔法方法和装饰器.xmind

    python魔法方法和装饰器.xmind

    Python黑魔法指南v3.01

    《Python黑魔法指南v3.01》是一本探索Python编程中不常用或不为人知特性的书籍。本文将从书中的几个章节提取关键知识点进行详细介绍。 1.1 **默默无闻的省略号(...)** 在Python中,省略号`...`是一个特殊的标识符...

    Python黑魔法手册 2.0 文档.pdf

    本资源是一本关于 Python 编程的电子教程,涵盖了 Python 编程的一些冷门知识、魔法知识和开发技巧。本文档共有多章,第一章记录了一些大多数开发者并不知晓的冷知识,内容基本延续 v1.0 。 1. 默默无闻的省略号 在...

    Python魔法方法详解

    他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。 Python 的魔术方法...

    Python 黑魔法指南 v3.0(1).tmp

    Python 黑魔法指南 v3.0(1)

    Python内置函数魔法方法清单明细一览表

    Python魔法方法明细一览表

    Python魔法方法功能与用法简介

    本文实例讲述了Python魔法方法功能与用法。分享给大家供大家参考,具体如下: 1、什么是魔法方法? 魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会...

    python魔法方法-属性转换和类的表示详解

    类型转换魔法其实就是实现了str、int等工厂函数的结果,通常这些函数还有类型转换的功能,下面是一些相关的魔法方法: •__int__(self) •转换成整型,对应int函数。 •__long__(self) •转换成长整型,对应long函数...

    通俗易懂的python魔法方法

    Python中的“魔法方法”(Magic Methods)是一组特殊命名的函数,它们以两个下划线开头和结尾(如`__str__`、`__repr__`等),这些方法提供了对语言结构的底层控制,使得我们可以自定义对象的行为,比如如何打印对象、...

    Python 黑魔法指南 v1.0.zip

    《Python 黑魔法指南》是一本专注于Python编程的高级教程,旨在揭示一些鲜为人知的技巧和使用方法,帮助开发者更高效、更深入地掌握Python语言。这份指南以PDF文档的形式提供,名为"Python 黑魔法指南 v1.0.pdf",...

    ヴィッキーサクラの魔法陣(PYTHON)2.0-COPY.zip

    《ヴィッキーサクラの魔法陣(PYTHON)2.0-COPY.zip》是一个包含Python编程示例的压缩文件,特别使用了Python的turtle模块。这个项目可能是一个图形绘制程序,通过Python的turtle库创建出类似“魔法阵”的精美图形。...

    ヴィッキーサクラの魔法陣(PYTHON)-COPY.zip

    ヴィッキーサクラの魔法陣(PYTHON)-COPY.zip Key:"vickysakura" 一个简单的魔法阵,可以在Python2.7.18下使用~

    Python-Python黑魔法实现集锦

    在这个名为"Sorcery-master"的压缩包中,我们可能找到了一系列关于Python黑魔法的实践案例。下面将详细探讨一些可能包含在其中的知识点。 1. **元编程(Metaprogramming)**:Python支持元编程,允许程序员在运行时...

    python魔法方法-自定义序列详解

    例如,如果要将一个类要实现迭代,就必须实现两个魔法方法:__iter__、next(python3.x中为__new__)。__iter__应该返回一个对象,这个对象必须实现 next 方法,通常返回的是 self 本身。而 next 方法必须在每次调用...

    第十一天 05运算相关的魔法方法【千锋Python人工智能学院】1

    在Python编程中,"魔法方法"(Magic Methods)是一类以双下划线开头和结尾的方法,它们在特定上下文中自动被调用,用于实现语言的一些内置行为。本篇文章将详细探讨运算相关的魔法方法,包括比较运算符和算术运算符...

    第十一天 04魔法方法【千锋Python人工智能学院】1

    在Python编程中,魔法方法(Magic Methods)是类中具有特殊功能的方法,它们的名字以两个下划线开头和结尾,例如`__init__`、`__del__`和`__str__`等。这些方法在特定场景下会被Python解释器自动调用,以实现特定的...

    Python魔法方法 容器部方法详解

    在Python编程中,魔法方法(也称为特殊方法)是指以双下划线(__)开头和结尾的方法。这些方法在Python中具有特殊含义,能够被Python解释器识别并赋予特定的功能。在容器类型方面,Python中的容器类型(container ...

Global site tag (gtag.js) - Google Analytics