• python中的__str__ __name__ 和__call__方法


      通过__str__( )函数可以打印对象的属性信息,方便我们调试代码。
    #通过__str__( )函数可以打印对象的属性信息,方便我们调试代码。
    
    class aa(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def __str__(self):
            return self.name + str(self.age)    #这里返回的是字符串不是int类型,要转化
    
    tom = aa("小三",18)
    print(tom)
    print(tom.name)
    
    打印结果:
    小三18
    小三

    python中的__name__

    def index():
        print("9999")
    
    index()
    f = index
    print(index.__name__)  #得到的是函数名
    print(f.__name__)
    
    运行结果:
    9999
    index
    index

    python中的__call__


    在Python中,__init__()函数的意义等同于类的构造器(同理,__del__()等同于类的析构函数)。因此,__init__()方法的作用是创建一个类的实例。

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

    总结
    那么,__init__()和__call__()的区别如下:
    1. __init__()的作用是初始化某个类的一个实例。
    2. __call__()的作用是使实例能够像函数一样被调用,同时不影响实例本身的生命周期(__call__()不影响一个实例的构造和析构)。但是__call__()可以用来改变实例的内部成员的值。

      本身类对象调用函数是 :对象.函数名,

    class Foo(object):
    def __init__(self, a, b, range):
    self.a = a
    self.b = b
    self.range = range
    def add(self,a,b):
    print("a+b的值为:%d"%(a+b))
    def __call__(self, a, b):
    self.a = a
    self.b = b
    print('打印call方法({}, {})'.format(self.a, self.b))


    x1 = Foo(1, 2, 3)#实例化一个对象
    print(x1)  #<__main__.Foo object at 0x000002A0A593A3C8>

    x1.add(3,5) #对象.函数名 #打印结果为:a+b的值为:8
    x1(1,2) #打印结果为:打印call方法(1, 2) ####将一个类实例对象当做函数调用,直接执行__call__方法
  • 相关阅读:
    [转载]杨建:网站加速--动态应用篇 (下)
    [转载]杨建:网站加速--动态应用篇 (下)
    [转载]正则表达式 30分钟入门 教程
    [转载]正则表达式 30分钟入门 教程
    Single Number
    数据库应该使用异步吗 Should my database calls be Asynchronous?
    C# return dynamic/anonymous type value as function result
    Entity Framework: 视图查询时重复返回第一行值, duplicate frst rows in resultset from a view
    wysiwyg editor
    shutdown computer in ad and ou
  • 原文地址:https://www.cnblogs.com/chvv/p/9854471.html
Copyright © 2020-2023  润新知