Python,在getattr中使用两个变量?

Python,在getattr中使用两个变量?,python,function,getattr,Python,Function,Getattr,我正在努力做到以下几点: import sys; sys.path.append('/var/www/python/includes') import functionname x = 'testarg' fn = "functionname" func = getattr(fn, fn) func (x) 但是我得到了一个错误: "TypeError: getattr(): attribute name must be string" 在调用getattr之前,我尝试过这个方法,但仍然不

我正在努力做到以下几点:

import sys; sys.path.append('/var/www/python/includes')
import functionname

x = 'testarg'
fn = "functionname"
func = getattr(fn, fn)
func (x)
但是我得到了一个错误:

"TypeError: getattr(): attribute name must be string"
在调用getattr之前,我尝试过这个方法,但仍然不起作用:

str(fn)

我不明白为什么会发生这种情况,请提供任何建议。听起来您可能想要的是
locals()
,而不是
getattr()

x = 'testarg'
fn = "functionname"
func = locals()[fn]
func (x)

当您有一个对象并且希望获取该对象的属性而不是本地名称空间中的变量时,应该使用getattr。

听起来您可能想要
locals()
而不是
getattr()

x = 'testarg'
fn = "functionname"
func = locals()[fn]
func (x)

当您有一个对象并且希望获取该对象的属性而不是本地名称空间中的变量时,应该使用getattr。

getattr的第一个参数是具有您感兴趣的属性的对象。在本例中,我假设您正在尝试获取函数的属性。所以第一个参数应该是函数。不是包含函数名的字符串,而是函数本身

如果要使用字符串,则需要使用类似于locals()[fn]的内容来查找具有该名称的实际函数对象


其次,将函数名传递给getattr两次。函数本身没有属性。你是说第二个参数是x吗?我想我真的不明白您在这里要做什么。

getattr的第一个参数是具有您感兴趣的属性的对象。在本例中,我假设您正在尝试获取函数的属性。所以第一个参数应该是函数。不是包含函数名的字符串,而是函数本身

如果要使用字符串,则需要使用类似于locals()[fn]的内容来查找具有该名称的实际函数对象


其次,将函数名传递给getattr两次。函数本身没有属性。你是说第二个参数是x吗?我想我真的不明白你在这里想做什么。

我得到了“AttributeError:'str'对象没有属性'functionname',这对我来说更有意义。我认为您的示例不完整。
getattr
的第一个参数应该是object@Rick,该名称的模块或该名称的对象?@Rick,我们不需要制作任何模块或任何东西:
getattr(x,fn)
其中
x
是任何东西(不会产生
语法错误
;-)而
fn
是一个字符串,不会产生您报告的错误。所以,我们知道你不是这么做的。你需要向我们展示你在做什么,用一个尽可能简化的版本,并且仍然复制准确的错误信息——如果
fn
是第二个参数,我可以自信地告诉你它不可能是一个字符串,但我猜不出你在看到你的一些代码的情况下到底是如何搞错的;-)@Rick,那些
import
s是完全不相关的:分配
fn
和调用
getattr
的两行如果紧挨在一起,就不可能产生你说它们产生的错误。我得到了“AttributeError:'str'对象没有属性'functionname',这对我来说更有意义。我认为您的示例不完整。
getattr
的第一个参数应该是object@Rick,该名称的模块或该名称的对象?@Rick,我们不需要制作任何模块或任何东西:
getattr(x,fn)
其中
x
是任何东西(不会产生
语法错误
;-)而
fn
是一个字符串,不会产生您报告的错误。所以,我们知道你不是这么做的。你需要向我们展示你在做什么,用一个尽可能简化的版本,并且仍然复制准确的错误信息——如果
fn
是第二个参数,我可以自信地告诉你它不可能是一个字符串,但我猜不出你在看到你的一些代码的情况下到底是如何搞错的;-)@Rick,那些
import
s是完全不相关的:分配
fn
和调用
getattr
的两行如果紧挨在一起,就不可能产生你说它们产生的错误。这是从导入中产生的,所以是这样的,我从导入中更新了OPits,所以是这样的,我更新了OPits谢谢。。是的,你是对的,我对它的用法感到困惑,我在某个地方的帖子中找到了getattr,说这样做可以调用一个可变函数名,但显然不是这样correct@Rick,我不明白,
functionname
是一个模块,您用参数调用它?谢谢。。是的,你是对的,我对它的用法感到困惑,我在某个地方的帖子中找到了getattr,说这样做可以调用一个可变函数名,但显然不是这样correct@Rick,我不明白,
functionname
是一个模块,你用一个参数来调用它?