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
    没有改方法
  • 相关阅读:
    An analysis of a simple Java basic interview question: short s1=1; s1 = s1 +1 will report an error?
    <bits/stdc++.h> in C++
    linux 下配置可视化git 冲突合并工具kdiff3
    加分
    对老师的意见和课程总结
    12月19日
    12月18日
    12月17日
    12月16日
    12月15日
  • 原文地址:https://www.cnblogs.com/wc89/p/10391909.html
Copyright © 2011-2022 走看看