zoukankan      html  css  js  c++  java
  • Python面向对象之-反射

    一: 概述

    Python中一切皆对象,在Python中的反射:通过字符串的形式操作对象的属性或者方法

    • hasattr  判断是对象否有改属性或者方法,有就返回True,没有就返回false
    • getattr  如果是属性获得该属性的值,如果是方法获得该方法的内存地址

    二: 在模块中使用反射

    两个文件,main,py,start,py 即Python的模块

    mian.py文件内容如下

    def func1():
        print('func1')
    
    def func2():
        print('func2')

    start.py文件内容如下

    print(hasattr(main,'func1'))
    print(hasattr(main,'func2'))
    print(hasattr(main,'func3'))

    执行如果如下

    True
    True
    False

    三: Python 面向对象中使用反射

    class Person:
        role = 'person'
        def __init__(self,name):
            self.name = name
    
        def walk(self):
            print("%s is walking"%self.name)
    
    wangys = Person('wangys')
    
    print(hasattr(wangys,'role'))
    print(hasattr(wangys,'name'))
    print(hasattr(wangys,'walk'))
    print(hasattr(wangys,'eat'))
    True
    True
    True
    False
    
    print(getattr(wangys,'role'))
    print(getattr(wangys,'name'))
    print(getattr(wangys,'walk'))
    getattr(wangys,'walk')()
    
    person
    wangys
    <bound method Person.walk of <__main__.Person object at 0x00000216037DDA90>>
    wangys is walking

    通常hasattr跟getattr结合使用

    class Person:
        role = 'person'
        def __init__(self,name):
            self.name = name
    
        def walk(self):
            print("%s is walking"%self.name)
    
    wangys = Person('wangys')
    
    if  hasattr(wangys,'role'):
        print(getattr(wangys,'role'))
    
    if hasattr(wangys,'walk'):
        getattr(wangys,'walk')()
    
    if hasattr(wangys,'eat'):
        getattr(wangys,'eat')()
    else:
        print('没有改方法')
    
    person
    wangys is walking
    没有改方法
  • 相关阅读:
    疯狂Java讲义-Java基础类库
    第十一届软件类校内模拟赛本科组Java软件开发
    疯狂Java讲义
    疯狂Java讲义-面向对象(下)
    疯狂Java讲义-面向对象(上)
    疯狂Java讲义-流程控制与数组
    疯狂Java讲义-数据类型和运算符
    数据结构-图和图遍历(DFS、BFS)
    A1034 Head of a Gang (30分)
    A1098 Insertion or Heap Sort (25分)
  • 原文地址:https://www.cnblogs.com/wc89/p/10391909.html
Copyright © 2011-2022 走看看