zoukankan      html  css  js  c++  java
  • 4.python中常用的魔法方法(长期更新)

    python中很多设定与c都不一样,比如符号重载,类中对象自身变量的初始化等等,都需要使用魔法方法来进行设定,而不是直接和C++一样直接赋值就可以。

    而python中魔法方法的特征就是有双下划线来包围在魔法方法名两边,如__str__,__init__等。

    一、init方法

    init方法是在对象的初始化时候使用的,不同于C++中的对象中直接定义,python对象中的初始化需要在这个魔法方法中来定义。

    以时间类为例:

    1 class Time(object):
    2     """docstring for Time"""
    3     def __init__(self, hour = 0,minute = 0,second = 0): #这里括号中因为添加了默认值,所以每个都写了,如果不设定默认值,只要个self就可以
    4         super(Time, self).__init__()
    6 self.hour = hour 7 self.minute = minute 8 self.second = second

    二、str方法

    str方法控制的是使用print函数打印这个类的对象的时候所表现的形式

    同样以时间类为例:

        def __str__(self):
            return '%.2d:%.2d:%.2d'%(self.hour,self.minute,self.second)

    这样的话:

    1 time = Time(9,8,15)
    2 print(time)
    3 
    4 输出09:08:15

    三、操作符重载

    以加法操作符重载为例子

    1 def __add__(self,other):
    2     seconds = self.time_to_int()+other.time_to_int()
    3     return int_to_time(seconds)

    和C中差不多只不过格式什么的不一样

    __cmp__操作符,也是载入两个对象self和other,重载的是==比较符,当第一个对象比第二个大的时候返回正数,当第二个对象大的时候返回负数,相等时返回0。 

    四. with中使用的上下文的魔法方法

     1 class ContextManager(object):
     2     
     3     def __enter__(self):
     4         print "Entering"
     5         return "my value"
     6     
     7     def __exit__(self, exc_type, exc_value, traceback):
     8         print "Exiting"
     9 
    10 with ContextManager() as value:
    11     print value
    12 输出为:
    13 Entering
    14 my value
    15 Exiting
    with <expression>:
        <block>
    以上为with的写法,可以看出先执行enter中的内容,在执行block,再执行exit中的。

    五、函数增加元信息
    def add(x:int, y:int) -> int:
        return x + y
    
    
    print(add.__annotations__)
    
    输出:
    {'y': <class 'int'>, 'return': <class 'int'>, 'x': <class 'int'>}

    >>> help(add)
    Help on function add in module __main__:
    add(x: int, y: int) -> int

    使用以上方式,可以获得函数的使用说明。

     

    以下是看到的一个关于魔法方法的指南,先摘录下来。上边自己遇到了还会更新

  • 相关阅读:
    PHP学习笔记(三)
    简单的学习心得:网易云课堂Android开发第六章SQLite与ContentProvider 熊,我
    简单的学习心得:网易云课堂Android开发第三章自定义控件 熊,我
    简单的学习心得:网易云课堂Android开发第五章SharedPreferences与文件管理 熊,我
    简单的学习心得:网易云课堂Android开发第四章服务、广播与酷特性 熊,我
    本地Server发布外网Web应用(Oray实现)
    玩玩微信公众号Java版之准备
    C语言的第零次作业
    C语言博客作业02循环结构
    C语言博客作业03函数
  • 原文地址:https://www.cnblogs.com/lixiaofou/p/7616534.html
Copyright © 2011-2022 走看看