文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python-----反射

2023-01-31 00:34

关注
class Person(object):
"""定义一个人类"""

def __init__(self, name):
self.name = name

def eat(self, food):
print("%s is eating %s" % (self.name, food))


def talk(self):
print("%s is yelling..." % self.name)


p = Person("hexingcong")

choice = input(">>>:").strip()
# 运行时,直接输入eat,无法运行,因为choice输入的是字符串格式,无法用p.choice来调用

if hasattr(p, choice):
# hasattr(p,choice)可以判断Person类中有没有choice这个方法,输入eat,控制台会输出True
# 输入talk,控制台会输出False

# delattr(p, choice)是用来删除对象的方法/属性的

func = getattr(p, choice)
# getattr(p,choice)得到类中的方法,
# 一般为其定义一个变量,因为eat这个方法中可能会含有参数然后通过变量来调用
func("apple")
# 如果Person类中的eat方法含有参数, 即def eat(self,food),
# 此处func(food)中就可以了加一个参数food,来传值
else:
setattr(p, choice, talk)
func = getattr(p, choice)
func(p)
# 如果输入一个talk,而Person中有没有talk()方法,就可以通过setattr来添加方法,
# 要先在Person类外写一个talk的方法

# setattr(p, choice, 22) # "22"可以写成别的
# getattr(p, choice)
# print(getattr(p, choice))
# 如果此时输入name,程序就会报错,因为name属性已经存在
# 所以就会运行 第20行 ,而name是一个属性,所以不能用func加()来调用


"""
总结------------------------------
1.hasattr(obj,name_str) 判断一个对象obj里是否有对应的name_str字符串的方法/属性
2.getattr(obj,name_str) 根据字符串来获取obj对象里对应的方法的内存地址
3.setattr(obj,name_str,v) is equivalent(等同于) to "obj.name_str = v"
4.delattr(obj,name_str)
删除对象的方法/属性
---------------------------------
"""

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯