27反射类的内置方法

Posted wyx666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了27反射类的内置方法相关的知识,希望对你有一定的参考价值。

一、反射

1、什么是反射?

  用字符串类型的名字去操作变量

2、反射对象中的属性和方法

  getattr\hasattr\setattr\delettr

3、  getattr:通过字符串类型的名字取到变量的值

  hasattr:判断字符串类型的名字对应的值是否存在

  setattr :(建立)设置字符串类型的名字和值

  deleattr:删除字符串类型的变量

getattr:

class A:
    def func(self):
        print(in func)

a = A()
a.name = alex
a.age = 63
# 反射对象的属性
ret = getattr(a,name)  # 通过变量名的字符串形式取到的值
print(ret)

hasattr(与getattr配合使用)

class A:
    price=20
    @classmethod
    def func(self):
        print(in the func)
if hasattr(A,func):                  #hasattr判断是否变量存在
    ret=getattr(A,func)
    ret()

反射模块中的属性和方法:

  可以反射模块(包括内置模块)的属性和方法,可以反射自己模块(其他模块)的函数和变量,还可以反射一个模块的类。

#模块
import my
#反射模块的属性
print(my.day)
print(getattr(my,day))

#反射模块的方法
getattr(my,wahaha)()

#内置模块也能用
time
asctime
import time
print(getattr(time,time)())
print(getattr(time,asctime)())

def qqxing():
    print(qqxing)
year = 2018
import sys
print(sys.modules[__main__].year)
# 反射自己模块中的变量
print(getattr(sys.modules[__main__],year))

# 反射自己模块中的函数
getattr(sys.modules[__main__],qqxing)()
变量名 = input(>>>)
print(getattr(sys.modules[__name__],变量名))

#要反射的函数有参数怎么办?
print(time.strftime(%Y-%m-%d %H:%M:S))
print(getattr(time,strftime)(%Y-%m-%d %H:%M:S))

#一个模块中的类能不能反射得到?
import my
print(getattr(my,C)())
if hasattr(my,name):
    getattr(my,name)

setattr:设置修改值

  

class A:
    def func(self):
        pass
a=A()
setattr(a,name,alex)
print(getattr(a,name))

delattr:删除一个变量

# delattr 删除一个变量
delattr(a,name)
print(a.name)
delattr(A,name)
print(a.name)

 二、类的内置方法

  __str__ 、__repr__、__del__、__len__、__call__

__str__:自己没有__str__方法的时候,就去父类object去调用,返回调用这个方法的对象的内存地址,如果自己定义了__str__方法,那么就执行自己的__str__方法,打印这个对                   象的时候,就会执行a.__str__方法(默认就执行了),(返回一些自己定义的方法)。

class A:
    def __str__(self):
        return "A‘s object"
a=A()
print(a)

__repr__:类似__str__方法,就是调用repr执行的内置方法,%r,print(repr)也是执行的它(不知道它有什么用)

__del__:析构函数,删除一个对象之前进行一些收尾工作

__call__:执行函数的时候自动执行打印一些属性

以上是关于27反射类的内置方法的主要内容,如果未能解决你的问题,请参考以下文章

python基础27——反射&内置方法

反射(高大上)类的内置方法

面向对象的进阶---反射--一些内置方法

27 isinstance与issubclass反射内置方法

反射自定义内置方法来定制类的功能元类

python反射及内置函数方法