python中的__str__ __name__ 和__call__方法

枫铃4年前 (2021-07-10)Python261

通过__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__

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def index():
    print("9999")

index()
f = index
print(index.__name__)  #得到的是函数名
print(f.__name__)

运行结果:
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__方法

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。