首页 > 其他分享 >反射 内置方法

反射 内置方法

时间:2023-09-26 15:25:35浏览次数:43  
标签:__ 反射 内置 self 调用 call 方法 class def

如何实现反射

class People:

  def __inti__(self,name,age):

    self.name=name

    self.age=age

  def say(self):

    print('<%s;%s>'%(self.name,self.age))

obj=People('猪猪同学',18)

 

 

classFtp:

  def put(self):

    print('正在执行上传功能')

  def get()self:

    print('正在执行下载功能')

  def interactive(self):

    method=input('>>>:').strip() #method='put' or 'get'

    if hasattr(salf,method):

      getattr(self,method)() #获取到用户输入的功能 再加括号运行功能

    else:

      print('输入的指令不存在')

 

obj=Ftp()

obj.interactive()

 

内置方法

是在类内部,以_ _开头并以_ _结尾的方法

特点:在某种情况下自动触发执行

为何要用内置方法:为了定制化我们的类or对象

 

__str__:再打印对象时会自动触发,然后将返回值当作

本次打印的结果输出 返回值 必须是字符串类型

__del__ 再删除之前  告诉操作系统删除这个(大致意思)

class机制分析:

class关键字创造类People的步骤:

1.拿类名 class_mame='People'

2.类的基类 class_bases=(object,)  类型是元组

3.执行类体代码拿到类的名称空间   class_dic={}

exec(class_body,{},class_dic)  #先拿到class_body里面的字符串,再创建一个字典,把内容放到字典里面去

4.会去帮我们调用元类

type(class_name,class_bases,class_dic)

 

如何自定义元类:

只有继承了type类的类才是元类

调元类或者实例化三个步骤:(type)

1.先造空对象===》People,调用类里面的__new__方法  造空对象

                 当前所在的类,调用类时所传入的参数

def __new__(cls,*args,**kwargs):

2.调用m这个类里面的__init__方法 完成初始化对象的操作

会将return的返回值空对象self和*args,**kwargs一起传给__init__   初始化对象

3.返回初始化好的对象

class m(type):

  pass

  class p(metaclass=m):

    def __init__(self,name,age):

      pass

.istitle()判断xx的首字母是否是大写

 

__call__:

如果想让一个对象加括号可以被调用  就在类中加__call__方法

例如:

class Foo:

  def __init__(self,x):

    self.x=x

    self.y=y

  def __call__(self,*args,**kwargs):

    print('===>',args,kwargs)

    return 123

obj=Foo(111,222)

res=obj(1,2,3,a=4,b=5,c=6)

print(res)

 

总结:

对象()-->类内的__call__

类()-->自定义元类内的__call__

自定义元类()-->内置元类__call__

 

类的产生:

1.type.__call__函数内会先调用Mymeta内的__new__

2.type.__call__内会调用调用Mymeta内的__init__

3.type.__call__内会返回一个初始化好的对象

类的调用:

obj=People('zhuzhu',18)====>Mymeta.__call__======干了三件事

1.Mymeta.__call__函数内会先调用People内的__new__

2.Mymeta.__call__内会调用调用People内的__init__

3.Mymeta.__call__内会返回一个初始化好的对象

 

 

 

 

 

标签:__,反射,内置,self,调用,call,方法,class,def
From: https://www.cnblogs.com/97zs/p/17672506.html

相关文章

  • linux系统安装软件时报错缺少libnsl.so.1文件解决方法
    linux系统安装软件时报错缺少libnsl.so.1文件解决方法1-当ISO文件或者在网上可以找到对应版本的libnsl库文件时,可采用以下命令安装:yuminstalllibnsl//系统ISO文件中存在libnsl库文件rpm-ivhlibnsl(下载的对应版本文件)//网上可以找到对应版本的libnsl库文件,并......
  • 【面试题】Js数组去重都有哪些方法?
    1.indexOf定义:indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置。如果没有找到匹配的字符串则返回-1。注意:iindexOf()方法区分大小写。语法:string.indexOf(searchvalue,start)//;searchvalue必需。searchvalue可选参数。返回值:Number//查找指定字符串第一次......
  • json数据传输压缩以及数据切片分割分块传输多种实现方法,大数据量情况下zlib压缩以及by
    json数据传输压缩以及数据切片分割分块传输多种实现方法,大数据量情况下zlib压缩以及bytes指定长度分割。importsysimportzlibimportjsonimportmathKAFKA_MAX_SIZE=1024*1024CONTENT_MIN_MAX_SIZE=KAFKA_MAX_SIZE*0.9defsplit_data(data):""":param......
  • TP6 TP8 使用阿里官方OSS SDK方法
    安装composerrequirealiyuncs/oss-sdk-php官网:GitHub-aliyun/aliyun-oss-php-sdk:AliyunOSSSDKforPHP二、PHP简单上传官网教程:如何进行字符串上传和文件上传_对象存储OSS-阿里云帮助中心引入useOSS\OssClient;useOSS\Core\OssException;上传代码publicfunctionputFi......
  • java实现一个接口多个实现类,并且调用指定实现方法@Service
    接口packagecn.daenx.framework.notify.sms.service;importcn.daenx.framework.common.vo.system.utils.SmsSendResult;importjava.util.Map;/***短信接口*/publicinterfaceSmsService{SmsSendResultsendSms(Map<String,String>info,Stringphone......
  • 关于keil导出数组、数据全是0解决方法
    最近我在采集spwm的电压,想导出散点用matlab画一下图,就找一些keil导出数据的方法,我到用这种写函数的的方式,结果导出全是0,找了很多帖子都没有解释。后来仔细看看才发现是一个十分低级的错误,在别的帖子上转载的都是printf("%d\n",a[i]);打印的都是整形,而我的数组是float类型,所以......
  • 真空干燥箱:工作原理、特点、技术参数及使用方法
    真空干燥箱是一种常用的实验室设备,它通过降低环境气压和升高温度,快速有效地去除样品中的水分和溶剂。由于其具有干燥速度快、干燥效果好、使用方便等优点,真空干燥箱在科研、制药、化工、食品等领域得到了广泛应用。本文将介绍真空干燥箱的工作原理、特点、技术参数及使用方法等方面......
  • 方法与递归
    方法拓展了解值传递(java)和引用传递java是值传递方法重载注意:方法名称必须相同方法的参数列表必须不同(可以是个数不同,类型不同,参数列表顺序不同)可变参数(VariableParameter)可变参数的形式在方法中test(inta,doubleb,int...i),,,int...i这就是可变参数的形式......
  • Ubuntu 22.04上安装docker方法及oracle 11g方法
    1.切换到管理员登录ubt2204@ubt2204-Virtual-Machine:~/database$suPassword:2.执行安装docker命令root@ubt2204-Virtual-Machine:/home/ubt2204/database#sudoaptinstalldocker.io3.启动docker服务systemctlstartdocker#或者sudoservicedockerstart4.......
  • math---多维随机变量函数的求法(截至目前已知的方法) 以及 卷积公式原理
    前言:感觉这里的知识有点小乱,遂浅浅整理一下零、卷积公式法原理https://www.bilibili.com/video/BV1mz4y1D7cW/?spm_id_from=333.788.top_right_bar_window_custom_collection.content.click&vd_source=87f7ad8544d4c3ad070c5c2ff28b7698卷积公式法的原理其实就是分布函数法+暴......