zoukankan      html  css  js  c++  java
  • 反射和内置方法

    一 反射

      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')
    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)
  • 相关阅读:
    c++vector(入门级)
    端口扫描(TCP)
    推荐安全程序员的书单(系统、网络、安全等)
    My latest news(--2016.12.31)
    HTML+JS+DOM【选项卡自动切换】
    20170916考试总结
    [Usaco2014 Mar]Sabotage
    [SHOI2014]概率充电器
    [Usaco2010 Dec]Exercise 奶牛健美操
    [JZOJ4687]奇袭
  • 原文地址:https://www.cnblogs.com/bk134/p/12706240.html
Copyright © 2011-2022 走看看