迈向大神day20 反射与一些常用的匿名函数

反射   ****

isinstance(obj,cls) #检查·是否obj 是类cls 对象

class A:pass
class B(A):pass
a = A()
print(isinstance(a,A))

issubclass(sub,super)#检查sub类是否是super类的派生类

class A:pass
class B(A):pass
a = A()
print(issubclass(B,A))

#反射

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

name=1
eval(print(name))
#反射对象中的属性和方法   # hasattr getattr setattr delattr
class A:
    def func(self):
        print('in func')

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

模块  之间也能反射

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

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

eg

def qqxing():
    print('qqxing')
year = 2018
import sys
# print(sys.modules['__main__'].year)

反射自己模块中的变量
print(getattr(sys.modules['__main__'],'year'))

反射自己模块中的函数
getattr(sys.modules['__main__'],'qqxing')()

输入执行的参数

def qqxing():
    print('qqxing')
year = 2018
import sys
# print(sys.modules['__main__'].year)
变量名 = input('>>>')
print(getattr(sys.modules[__name__],变量名))

几个内置的方法

# 内置的类方法 和 内置的函数之间有着千丝万缕的联系
obj.__str__  str(obj)
obj.__repr__ repr(obj)  #原型毕露

自己实现str 方法
 class Teacher:
    def __init__(self,name,salary):
        self.name = name
        self.salary = salary
    def __str__(self):  #重定向了  执行str返回的内容 
        return "Teacher's object :%s"%self.name
    def __repr__(self):
        return str(self.__dict__)
    def func(self):
        return 'wahaha'
nezha = Teacher('哪吒',250)
print(nezha)  # 打印一个对象的时候,就是调用a.__str__
print(repr(nezha))  #<==>print('%r'%nezha)     

print('>>> %r'%nezha)   
#repr  是str 的备胎











print(obj)/'%s'%obj/str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有,那么他返回的必定是一个字符串
如果没有__str__方法,会先找本类中的__repr__方法,再没有再找父类中的__str__。
repr(),只会找__repr__,如果没有找父类的

析构函数

def del(self): # 析构函数: 在删除一个对象之前进行一些收尾工作

__del__
class A:
    def __del__(self):   # 析构函数: 在删除一个对象之前进行一些收尾工作
        self.f.close()
a = A()
a.f = open()   # 打开文件 第一 在操作系统中打开了一个文件 拿到了文件操作符存在了内存中
del a          # a.f 拿到了文件操作符消失在了内存中
引用计数与删除完成有关

call 方法()

class A:
    def __init__(self,name):
        self.name = name
    def __call__(self):
        '''
        打印这个对象中的所有属性
        :return:
        '''
        for k in self.__dict__:
            print(k,self.__dict__[k])
a = A('alex')()   # 执行了call 方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值