反射和内置方法

反射和内置方法

 

 


回到顶部

一 反射

  1.1 什么是反射  

    指的是在程序运行过程中可以"动态(不见棺材不掉泪)"获取对象的信息

    反射机制指的是在程序的运行状态中,对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意方法和属性。

  1.2 如何使用反射

    实现反射机制的步骤

    1.先通过多dir:查看出某一个对象下可以.出哪些属性来

 
class People:
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def say(self):
        print('<%s:%s>' %(self.name,self.age))

obj=People('辣白菜同学',18)
print(dir(obj))
#[...., 'age', 'name', 'say']
 

    2.想办法通过字符串来操作对象的属性:这就涉及到内置函数hasattr、getattr、setattr、delattr的使用了(Python中一切皆对象,类和对象都可以被这四个函数操作,用法一样)

 
class Teacher:
    def __init__(self,full_name):
        self.full_name =full_name
t=Teacher('Egon Lin')

# hasattr(object,'name')    返回True和False
hasattr(t,'full_name')#判断有无属性t.full_name

# getattr(object, 'name', default=None)
getattr(t,'full_name',None) # 等同于t.full_name,不存在该属性则返回默认值None

# setattr(x, 'y', v)
setattr(t,'age',18) # 等同于t.age=18

# delattr(x, 'y')
delattr(t,'age') # 等同于del t.age
 

    基于反射可以十分灵活地操作对象的属性,比如将用户交互的结果反射到具体的功能执行

 
class Ftp:
    def get(self):
        print('正在执行下载功能')
    def put(self):
        print('正在执行上传功能')

    def interactive(self):
        cmd = input('输入命令:').strip()
        if hasattr(self,cmd):
            getattr(self,cmd)()
        else:
            print('输入命令不存在')
obj = Ftp()
obj.interactive()
 

 

回到顶部

二 内置方法

  2.1 什么是内置方法

    定义在类内部,以__开头并以__结果的方法

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

  2.2 为什么要有内置方法

    为了定制化我们的类or对象

  2.3 如何使用内置方法

    __str__方法会在对象被打印时自动触发,print功能打印的就是它的返回值,我们通常基于方法来定制对象的打印信息,该方法必须返回字符串类型

 
class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return "<%s:%s>" %(self.name,self.age)
obj = People('qqq',18)
print(obj)
 

    __del__:在清理对象时触发,会先执行该方法

 
class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.x = open('a.txt',mode='w')# self.x = 占据的是操作系统资源
    def __del__(self):# 在对象obj被删除时,自动触发obj.__del__()
        self.x.close()

obj = People('qqq',18)
posted @ 2021-04-07 17:35  欧阳锦涛  阅读(50)  评论(0)    收藏  举报
TOP 底部