Python 3.6 简单反射

# -----------------------
# __Author : tyran
# __Date : 17-11-13
# -----------------------


class Base:
    def __init__(self):
        self.name = 'aaa'
        self.age = 18

    def show(self):
        print(self.age)


# 通过getattr()找到对象的成员
base = Base()
v = getattr(base, 'name')
print(v)  # aaa
func1 = getattr(base, 'show')
func1()  # 18
# 通过hasattr()查找成员是否存在
print(hasattr(base, 'name'))  # True
print(hasattr(base, 'name1'))  # False
# 通过setattr()给对象添加成员
setattr(base, 'k1', 'v1')
print(base.k1)
delattr(base, 'k1')  # v1


# print(base.k1)  报错AttributeError: 'Base' object has no attribute 'k1'
# -------------------------------------------------------------------------
# Class也是一个对象
class ClassBase:
    sex = 'male'

    def __init__(self):
        self.name = 'aaa'
        self.age = 11

    @staticmethod
    def show():
        print('I am static')

    @classmethod
    def c_method(cls):
        print(cls.sex)


sex_value = getattr(ClassBase, 'sex')
print(sex_value)
s_func = getattr(ClassBase, 'show')
s_func()
c_func = getattr(ClassBase, 'c_method')
c_func()
# 这些都没问题
setattr(ClassBase, 'has_girlfriend', True)  # 添加静态成员
print(ClassBase.has_girlfriend)  # True
# ---------------同理,模块也是对象-------------
# 我新建了一个模块s1.py,我把内容复制下来
# class S1:
#     def __init__(self):
#         self.name = 'aaa'
#         self.age = 22
#
#     def show(self):
#         print(self.name)
#         print(self.age)
#
#
# def func1():
#     print('page1')
#
#
# def func2():
#     print('page2')

# 一个类,两函数
import s1

s1_class = getattr(s1, 'S1', None)
if s1_class is not None:
    c1 = s1_class()
    c1.show()
    # aaa
    # 22

getattr(s1, 'func1')()  # page1

f2 = 'func2'
if hasattr(s1, f2):
    getattr(s1, 'func2')()  # page2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值