zoukankan      html  css  js  c++  java
  • Python(2.7.6) 特殊方法

      

    在 Python 中有种特殊方法,也称为魔法方法。特殊方法的方法名的前后各有两个下划线,如__init__,这种拼写表示名字有特殊的意义。如果类实现了这些方法中的某一个,那么这个方法会在特殊的情况下被调用。

    可以使用 dir()  查看对象实现的特殊方法。

    >>> dir(list)
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

    当类实现了 __init()__ 方法,在创建对象的时候会自动调用 __init()__ 方法。

    当使用运算符进行运算的时候,实际上是通过调用对象的特殊方法实现的,如:
      [1, 2] + [3, 4, 5]
    实际执行的操作是:
      [1, 2].__add__([3, 4, 5])
    所以,如果想实现类似于 C++ 中的运算符重载,让自定义的类对象通过运算符进行运算,只要在自定义的类中实现相应的特殊方法即可:

    class MyObject(object):
        
        def __init__(self, size = 0):
            super(MyObject, self).__init__()
            self.size = size
    
        def __add__(self, obj):
            if isinstance(obj, MyObject) :
                return MyObject(self.size + obj.size)
            else :
                raise TypeError('can only concatenate MyObject (not "%s") to MyObject' % type(obj))
    
    obj = MyObject(2) + MyObject(3)
    print obj.size

    许多内置函数也是调用对象的特殊方法,如:
      len('hello world')
    实际执行的操作是
      'hello world'.__len__()

    在 Python 中,一切皆对象,函数也是一个对象。实际上,实现了 __call__() 方法的对象都可以当作一个函数。

    class Square(object):    
        def __call__(self, n):
            return n ** 2
    
    square = Square()
    print square(10)
  • 相关阅读:
    文本溢出显示省略号
    css3 计算属性 calc()
    让一个图片在div中居中(4种方法)
    css3 圆形、圆环、半圆、四分之一圆、扇形
    媒体查询
    base.css默认公共样式
    CSS 清除默认样式
    CSS篇之4---样式的层级关系,选择器优先级,样式冲突,以及抽离样式模块怎么写,说出思路,有无实践经验
    CSS篇之3---position 和 display 的取值和各自的意思和用法
    Selenium+Java+Jenkins+TestNg
  • 原文地址:https://www.cnblogs.com/huey/p/4365424.html
Copyright © 2011-2022 走看看