我试图为代码中所示的不同变量调用相同的方法。 在该示例中,我试图通过发送变量名称来获取值的两倍。
我尝试了不同的方法,但似乎都没有效果:
Class Number:
def __init__(self, a, b):
self.num = a
self.float = b
def teste(self, val):
print(2*self.val)
l=Number(3,9)
l.teste(a)
l.teste(b)
我希望输出为6和18
答案 0 :(得分:1)
代码中有几个问题
class
,而不是Class
num
和float
的是实例变量,而不是类变量float
是属性名称的不好选择(也就是说,它暗示该类型为浮点型,但未强制执行)val
不是类的属性,而是teste()
方法的参数。因此,您在引用self.
时不需要。虽然我不确定目的是什么,但是您可以通过它实现您想要的
class Number:
def __init__(self, a, b):
self.num = a
self.float = b
def teste(self, val):
print(2 * getattr(self, val))
def testb(self, val):
print(2 * val)
foo = Number(3, 9)
foo.teste('num')
foo.teste('float')
foo.testb(foo.num)
foo.testb(foo.float)
# but you can do also for any number
foo.testb(10)
请注意teste()
和testb()
之间的区别
答案 1 :(得分:0)
您不能这样做。当您致电l.teste(a)
时,名称a
表示什么都没有,您会得到一个错误。
在a
退出后,即使您在b
中用作参数的__init__
和__init__
也停止存在,并且只能从__init__
内部访问
尽管存在self.num
和self.float
。您可以使用getattr动态访问它们,如下所示(请注意,我们将属性名称作为字符串传递给getattr):
class Number:
def __init__(self, a, b):
self.num = a
self.float = b
def teste(self, varname):
print(2*getattr(self, varname))
l=Number(3,9)
l.teste('num')
# 6
l.teste('float')
# 18