zoukankan      html  css  js  c++  java
  • python中的 __xxx__ 方法

    1 __class__

      instance.__class__

      The class to which a class instance belongs

    def foo():
        pass
    class A(object):
        pass
    s = 'abc'
    l = [1,2,3]
    t = (1,2,3)
    d = {'a':1}
    
    print('foo',foo.__class__)
    print('foo',foo.__class__.__class__)
    print('A',A.__class__)
    print('A',A.__class__.__class__)
    print('s',s.__class__)
    print('s',s.__class__.__class__)
    print('l',l.__class__)
    print('l',l.__class__.__class__)
    print('t',t.__class__)
    print('t',t.__class__.__class__)
    print('d',d.__class__)
    print('d',d.__class__.__class__)

      输出:

    foo <class 'function'>
    foo <class 'type'>
    A <class 'type'>
    A <class 'type'>
    s <class 'str'>
    s <class 'type'>
    l <class 'list'>
    l <class 'type'>
    t <class 'tuple'>
    t <class 'type'>
    d <class 'dict'>
    d <class 'type'>

    2 __name__

      definition.__name__

      The name of the class, function, method, descriptor, or generator instance.

    def foo():
        pass
    class A(object):
        pass
    s = 'abc'
    l = [1,2,3]
    t = (1,2,3)
    d = {'a':1}
    
    print(foo.__name__)
    print(foo.__class__.__name__)
    print(foo.__class__.__class__.__name__)
    print(A.__name__)
    print(A.__class__.__name__)
    print(A.__class__.__class__.__name__)

      输出:

    foo
    function
    type
    A
    type
    type

    3 __call__

      object.__call__(self,[ args ** ])

      Called when the instance is “called” as a function; if this method is defined, x(arg1, arg2, ...) is a shorthand for x.__call__(arg1, arg2, ...).

      Python中的函数是一级对象。这意味着Python中的函数的引用可以作为输入传递到其他的函数/方法中,并在其中被执行。 
    而Python中类的实例(对象)可以被当做函数对待。也就是说,我们可以将它们作为输入传递到其他的函数/方法中并调用他们,正如我们调用一个正常的函数那样。而类中__call__()函数的意义正在于此。为了将一个类实例当做函数调用,我们需要在类中实现__call__()方法。也就是我们要在类中实现如下方法:def __call__(self, *args)。这个方法接受一定数量的变量作为输入。 
    假设x是X类的一个实例。那么调用x.__call__(1,2)等同于调用x(1,2)。这个实例本身在这里相当于一个函数。

    class A(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __call__(self):
            print('{}年龄{}'.format(self.name,self.age))
    
    a = A('zuo',18)
    a()
    
    class B(object):
        def __init__(self):
            pass
        def __call__(self,a,b):
            self.a = a
            self.b = b
            print('{}*{}={}'.format(a,b,a*b))
    
    b = B()
    b(4,5)
    b.__call__(4,5)
  • 相关阅读:
    苹果mac shell 终端 命令行快捷键——行首行尾
    mac 编译ffmpeg真简单!
    (2)小彩灯接收数据解析
    JSON数据解析(自写)
    ESP-手机--双向通信模式
    史上最全脉搏心率传感器PulseSensor资料(电路图+中文说明书+最全源代码)
    OpenSCAD 大白
    用OpenSCAD設計特製的遊戲骰子
    如何使用openscad绘制一个简单的键帽.
    OpenSCAD(1)基础教程
  • 原文地址:https://www.cnblogs.com/654321cc/p/8882069.html
Copyright © 2011-2022 走看看