zoukankan      html  css  js  c++  java
  • 内置函数(面向对象)

    这里我会只针对类和对象常规会用到的以下4个内置函数进行实例介绍

    • hasattr
    • getattr
    • setattr
    • delattr

    下面是主体函数

    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
    

    针对类

    • hasattr

    判断school这个属性在不在Teacher这个类里返回值为布尔值

    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
    print(hasattr(Teacher,"school")) 
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    True
    
    Process finished with exit code 0
    
    
    • getattr

    取出school在Teacher中绑定的值

    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
    print(hasattr(Teacher,"school")) 
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    MIT
    
    Process finished with exit code 0
    

    同时getattr还有另外一种用法:即在可以查看类的属性指定一个返回值

    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    None
    
    Process finished with exit code 0
    
    
    • setattr

    设定类的数据属性值

    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
    
    Teacher.x=3
    setattr(Teacher,"x",123)  
    print(Teacher.x)
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    123
    
    Process finished with exit code 0
    
    • delattr

    删除类的数据属性

    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
            
    delattr(Teacher,"school")    
    print(getattr(Teacher,"school",None))     
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    None
    
    Process finished with exit code 0
    

    针对对象

    • hasattr
    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
            
    t=Teacher("whatmini",18)
    print(hasattr(t,"name"))
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    True
    
    Process finished with exit code 0
    
    • getatt
    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
    t=Teacher("whatmini",18)
    print(getattr(t,"name")) 
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    whatmini
    
    Process finished with exit code 0
    
    • setattr
    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
            
    setattr(t,"sex","male")  
    print(getattr(t,"sex"))
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    male
    
    Process finished with exit code 0
    
    • delattr
    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
    print(t.__dict__)
    delattr(t,"name")  
    print(t.__dict__)
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    {'name': 'whatmini', 'age': 18}
    {'age': 18}
    
    Process finished with exit code 0
    

    这里我演示的删除是在对象的字典中直接删除。需要明白的是这四个内置函数在对类和对象的属性进行的增删查该的行为,都是在类和对象的名称空间进行的,这是本质的行为。

    class Teacher:
        school="MIT"
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def teach(self):
            print("%s teach" %self.name)
    print(getattr(t,"teach"))
    print(getattr(t,"school"))
    t.school="kjkjkjkjkj"
    print(t.__dict__)
    
    "D:Program Filespython.exe" "E:/py_code/day 12/反射.py"
    <bound method Teacher.teach of <__main__.Teacher object at 0x00000000029420B8>>
    MIT
    {'name': 'whatmini', 'age': 18, 'school': 'kjkjkjkjkj'}
    
    Process finished with exit code 0
    
  • 相关阅读:
    Typora使用腾讯云图床
    2020年8月总结
    113 路径之和II
    103 二叉树的锯齿形层次遍历
    128 最长连续序列
    160 相交链表
    33 搜索旋转排序数组
    学习制作GitHub徽标
    105 从前序与中序遍历序列构造二叉树
    重新封装了layer.tips,自定义跟随弹窗
  • 原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/7133023.html
Copyright © 2011-2022 走看看