zoukankan      html  css  js  c++  java
  • 面向对象------------------------------反射(面向对象的又一个思路)

    对 对象的反射

    hasattr(obj,'属性名/函数名')#检查是不是有

    getattr(obj,'属性名/函数名')#获取属性名或函数名****对象反射得到的函数()进行调用时候不用传入对象这个参数

    setattr(obj,'属性名',返回值)#设置属性使得obj.'属性名‘ = 返回值

    setattr(obj,'函数名',函数:(lambda self(返回值):self.name+'sb'))#设置属性使得obj.'函数名‘ = 函数

    delattr(obj,'属性')#删除对象属性

    delattr(obj,'函数名')#删除对象函数

    class Foo:

    f = '类的静态变量'

    def init(self,name,age):

    self.name=name

    self.age=age

    def say_hi(self):

    print('hi,%s'%self.name)

    obj=Foo('egon',73)

    #检测是否含有某属性

    print(hasattr(obj,'name'))

    print(hasattr(obj,'say_hi'))

    #获取属性

    n = getattr(obj,'name')

    print(n)

    func = getattr(obj,'say_hi')

    func()

    print(getattr(obj,'aaaaaaaa','不存在啊')) #报错

    #设置属性

    setattr(obj,'sb',True)

    setattr(obj,'show_name',lambda self:self.name+'sb')

    print(obj.dict)

    print(obj.show_name(obj))

    #删除属性

    delattr(obj,'age')

    delattr(obj,'show_name')

    # delattr(obj,'show_name111')#不存在,则报错

    print(obj.dict)

    类 的反射

    getattr(Class, '属性')

    getattr(Class, '方法名')

    getattr(Class, '静态方法')

    getattr(Class, '_Class+私有方法名')

    getattr(Class, '_Class+私有属性名')

    print(getattr(Foo, 'aaa')()) # 这个不明白为什么不传参数??????????????????????

    #####################################################################################

    class Foo(object):

    staticField = "old boy"

    __aaa = '2222'

    def init(self):

    self.name = 'wupeiqi'

    def func(self):

    return 'func'

    @staticmethod

    def bar():

    return 'bar'

    def __add(self):

    return '__add'

    @classmethod

    def aaa(cls):

    return 'aaa'

    a = Foo()

    print(getattr(Foo, 'staticField'))#属性可以反射拿到

    print(getattr(Foo, '_Foo__aaa'))#属性可以反射拿到

    print(getattr(Foo, 'func')(Foo))#方法可以反射拿到

    print(getattr(Foo, 'bar')())# 静态方法 也可以找

    print(getattr(Foo, '_Foo__add')(Foo)) #类和对象都能去调用这个类的私有方法(首先是找到私有方法)

    print(getattr(Foo, 'aaa')()) # 这个不明白为什么不传参数??????????????????????

    ##################################################################################

    import sys

    def s1():

    print('s1')

    def s2():

    print('s2')

    this_module = sys.modules[name]

    print(this_module)

    hasattr(this_module, 's1')()

    getattr(this_module, 's2')()

    ###########################################################

    # 一个模块中的代码

    def test():

    print('from the test')

    """

    程序目录:

    module_test.py

    index.py

    当前文件:

    index.py

    """

    # 另一个模块中的代码

    import module_test as obj

    # obj.test()

    print(hasattr(obj, 'test'))

    getattr(obj, 'test')()

  • 相关阅读:
    Android
    Android
    Android
    Android
    Android
    【工作中学习】CreateProcessAsUser失败,错误码:1314
    【Angular JS】网站使用社会化评论插件,以及过程中碰到的坑
    【Angular JS】正确调用JQuery与Angular JS脚本
    【工作】Proxy Server的优化
    AWS ELB Sticky Session有问题?别忘了AWSELB cookie
  • 原文地址:https://www.cnblogs.com/wing3993/p/11392322.html
Copyright © 2011-2022 走看看