反射 # hasatter 检测是否含有某属性 # getattar 获取属性 # setattr 设置属性 # delattr 删除属性



# hasatter 检测是否含有某属性
# getattar 获取属性
# setattr  设置属性
# delattr  删除属性

class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def say_hi(self):
        print("hi,guys , my name is " ,self.name)

obj=Person('Alex',26)

# 检测是否含有某属性
print(hasattr(obj,"name"))
print(hasattr(obj,"say_hi"))

# 获取属性
print(getattr(obj,"name"))
function = getattr(obj,"say_hi")
function()

# 设置属性
setattr(obj,'hobby','girl')
setattr(obj,"show_name",lambda self:self.name+'--%s'%self.age)
print(obj.__dict__)
print(obj.show_name(obj))

# 删除属性
delattr(obj,'age')
delattr(obj,'show_name')
print(obj.__dict__)


# 反射模块成员
import sys
def s1():
    print('s1')
class Person(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
name = "test"
this_module = sys.modules[__name__] # __name__ 会动态的代表当前模块名
print(this_module)
print(__name__)
print(hasattr(this_module, 's1'))
print(hasattr(this_module, 'name'))
print(getattr(this_module, 'Person'))
p = getattr(this_module, 'Person')
t =p("Alex",22)
print(t.name)

# 反射的 实例运用 网站点击

#  未用反射
class User:

    def login(self):
        print('欢迎来到登录页面')
    def register(self):
        print('欢迎来到注册页面')
    def save(self):
        print('欢迎来到存储页面')
while 1:
    choose = input('>>>').strip()
    if choose == 'login':
        obj = User()
        obj.login()
    elif choose == 'register':
        obj = User()
        obj.register()
    elif choose == 'save':
        obj = User()
        obj.save()

# 使用反射后
class User:
    def login(self):
        print('欢迎来到登录页面')
    def register(self):
        print('欢迎来到注册页面')
    def save(self):
        print('欢迎来到存储页面')
user = User()
while 1:
    choose = input('>>>').strip()
    if hasattr(user,choose):
        func = getattr(user,choose)
        func()
    else:
        print('输入错误。。。。')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值