zoukankan      html  css  js  c++  java
  • python 面向对象(四)反射

    ####################总结##########

    1.

    isinstance: 判断xxx是否是xxx类型的(向上判断) 
    type: 返回xx对象的数据类型
    issubclass: 判断xxx类是否是xxx类的子类

    type: 返回xx对象的数据类型

    def add(a, b):
        if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
            return a + b
        else:
            print("算不了")
    
    print(add("胡汉三", 2.5))

    issubclass: 判断xxx类是否是xxx类的子类

    class Animal:
        pass
    class Cat(Animal):
        pass
    class BoSiCat(Cat):
        pass
    print(issubclass(Cat, Animal)) # 判断第一个参数是否是第二个参数的后代
    print(issubclass(Animal, Cat))
    print(issubclass(BoSiCat, Animal)) # True
    
    #结果
    True
    False
    True

    2.

    区分函数和方法

    #方法一

    def
    func(): print("我是函数") class Foo: def chi(self): print("我是吃") # print(func) # <function func at 0x0000000001D42E18> f = Foo() # f.chi() print(f.chi) # <bound method Foo.chi of <__main__.Foo object at 0x0000000002894A90>> # 野路子: 打印的结果中包含了function. 函数 # method . 方法
    #方法二
    from collections import Iterable, Iterator # 迭代器
    from
    types import FunctionType, MethodType # 方法和函数 class Person: def chi(self): # 实例方法 print("我要吃鱼") @classmethod def he(cls): print("我是类方法") @staticmethod def pi(): print("泥溪镇地皮")
    p
    = Person() print(isinstance(Person.chi, FunctionType)) # True print(isinstance(p.chi, MethodType)) # True

     3.反射

    1. hasattr(对象, str) 判断对象中是否包含str属性
    2. getattr(对象, str) 从对象中获取到str属性的值
    3. setattr(对象, str, value) 把对象中的str属性设置为value
    4. delattr(对象, str) 把str属性从对象中删除

    class Person:
        def __init__(self,name,laopo):
            self.name=name
            self.laopo=laopo
    p= Person('宝宝','林志玲')
    
    print(hasattr(p,'laopo'))
    print(getattr(p,'laopo'))
    setattr(p,'laopo','胡一菲')
    setattr(p,'money',1000)
    
    print(p.laopo)
    print(p.money)
    delattr(p, "laopo") # 把对象中的xxx属性移除.  != p.laopo = None
    print(p.laopo)
    
    ########结果
    True
    林志玲
    胡一菲
    1000
    
    Traceback (most recent call last):
    File "D:/python_work_s18/day18关系/test.py", line 87, in <module>
    print(p.laopo)
    AttributeError: 'Person' object has no attribute 'laopo'
    
    Process finished with exit code 1

    实例二  

    ####单独文件master
    def chi():
        print("大牛很能吃")
    
    def he():
        print("大牛一次喝一桶")
    
    def shui():
        print("大牛一次睡一年")
    
    def play_1():
        print("大牛不玩儿压缩了. 玩儿儿童节")
    
    def sa():
        print("大牛很能撒谎")
    
    def la():
        print("大牛喜欢拉二胡")
    while 1:
        content = input("请输入你要测试的功能:") # 用户输入的功能是一个字符串
    
        # 判断 xxx对象中是否包含了xxxxx
        if hasattr(master, content):
            xx = getattr(master, content)
            xx()
            print("有这个功能")
        else:
            print('没有这个功能')
    不怕大牛比自己牛,就怕大牛比自己更努力
  • 相关阅读:
    Uva 10935 Throwing cards away I
    Uva 3226 Symmetry
    eclipse @ 注释为何一写就报错
    2015省赛小感想
    Zoj 3842 Beauty of Array
    fedora 设置命令别名
    Uva220 Othello
    工作小技巧积累
    SSL介绍与Java实例
    一个完整的SSL连接建立过程
  • 原文地址:https://www.cnblogs.com/zaizai1573/p/10159526.html
Copyright © 2011-2022 走看看