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
    没有改方法
  • 相关阅读:
    tomcat部署web应用的4种方法
    Spring连接数据库的几种常用的方式
    Spring 的两个配置容器的讲解
    c3p0详细配置
    tomcat启动很慢的原因
    J2EE程序员应该要掌握的linux知识
    hibernate-mapping的各种属性配置
    在Eclipse添加Android兼容包( v4、v7 appcompat )
    微信抢红包软件-android
    Gradle sync failed: Failed to find Build Tools revision 26.0.2的解决办法
  • 原文地址:https://www.cnblogs.com/wc89/p/10391909.html
Copyright © 2011-2022 走看看