反射(hasattr , getattr, setattr) 输入的字符串用来运行程序

当用户输入字符串时,不能够用来运行程序

1.使用 hasattr 找出输入的字符串是否在程序内

2.使用 getattr 返回找出字符串对应的函数的内存地址或者变量

3. 使用setattr 添加新的函数,或者改变已有的程序的实例变量或类变量

import easygui 

def bulk(self):
	print(‘%s is talking‘%self.name)

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

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

find_info = easygui.enterbox(‘please give me you want‘)
d = Dog(‘ronghua‘)

if hasattr(d, find_info): #判断这个变量是否在函数内
	func = getattr(d, find_info)  #找到这个变量
#	print(getattr(d, find_info))
	func(‘包子‘)  #运行
else:
	setattr(d, find_info, bulk)  # 如果bulk 函数不在类内,载入bulk函数,用find_info 命名

func = getattr(d, find_info)
func(d)

  

原文地址:https://www.cnblogs.com/my-love-is-python/p/9102706.html

时间: 2024-11-06 11:22:15

反射(hasattr , getattr, setattr) 输入的字符串用来运行程序的相关文章

python反射hasattr getattr setattr delattr

反射 : 是用字符串类型的名字 去操作 变量 相比于用eval('print(name)') 留有 安全隐患 反射 就没有安全问题 hasattr 语法: hasattr(object, name)object可以是对象,类,模块,当前Py文件.name是一个给字符串数据类型,可以是变量(属性),函数(方法).如果name在object中存在,则返回Ture,否则返回False. getattr与hasattr语法相同,返回的结果是对应name的值或函数. 反射对象的方法 a.func() re

Python hasattr,getattr,setattr,delattr

#!/usr/bin/env python# -*- coding:utf-8 -*-# 作者:Presley# 邮箱:[email protected]# 时间:2018-11-04# 反射使用import sysclass WebServer(object): def __init__(self,host,port): self.host = host self.port = port def start(self): print("Server is starting...")

python 语法 内置函数 hasattr getattr setattr dir

参考: https://docs.python.org/3/library/functions.html?highlight=hasattr#getattr 例子1:针对类TestA 做属性操作 class TestA: def fun_1(self): print "fun_1" def fun_2(self): print "fun_2" def fun_2(): print "fun_3" test_a = TestA() print ha

Python的反射机制、hasattr() getattr() setattr() 函数使用方法详解

hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 >>> class test(): 2 ... name="xiaohua" 3 ... def run(self): 4 ... return "HelloWord" 5 ... 6 >>> t=test() 7 >>&

Python:hasattr() getattr() setattr() 函数

hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. class test(): name="xiaohua" def run(self): return "HelloWord" >>> t=test() >>> hasattr(t, "name") #判断对象有name属性 True >>

python中hasattr getattr setattr用法

一:hasattr 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 >>> class test():  2 ...     name="xiaohua"  3 ...     def run(self):   4 ...             return "HelloWord"  5 ...   6 >>> t=te

【python】isinstance可以接收多个类型,hasattr,getattr,setattr

来源:廖雪峰 可以判断一个变量是否是某些类型中的一种,比如下面的代码就可以判断是否是str或者unicode: >>> isinstance('a', (str, unicode)) True >>> isinstance(u'a', (str, unicode)) True 由于str和unicode都是从basestring继承下来的,所以,还可以把上面的代码简化为: >>> isinstance(u'a', basestring) True 仅仅

Python的hasattr() getattr() setattr() 函数使用方法详解

最近用到对用户信息进行判断,看到这个方法的详解,感觉比较好,所以拿过来,让自己可以时常看看 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 getattr(object, name[,default])获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选.需要注意的是,如果是返回的对象的方法,返回的是方法的内存地

Python的hasattr() getattr() setattr() 函数

class C(object):     def __init__(self):         self.a = 'hello'         self.b = 'world'         self.foo = 100     def get(self):         return self.a if __name__ == '__main__':     c = C()     #判断一个对象里面是否有name属性或者name方法,返回BOOL值     print(hasattr