Python 可以为不同的类变量调用相同的方法吗
我试图为不同的变量调用相同的方法,如代码所示。 在本例中,我试图通过发送变量名来获取值的双精度 我尝试过不同的方法,但似乎都不管用:Python 可以为不同的类变量调用相同的方法吗,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我试图为不同的变量调用相同的方法,如代码所示。 在本例中,我试图通过发送变量名来获取值的双精度 我尝试过不同的方法,但似乎都不管用: 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) 我希望输出
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,你不能这样做。当您调用
l.teste(a)
时,名称a
不表示任何内容,您将得到一个错误
即使是在\uuuu init\uuuu
中用作参数的a
和b
也会在\uuuu init\uuuu
退出后立即停止存在,并且只能从\uuuu init\uuu
内部访问
然而,存在的是self.num
和self.float
。您可以使用动态访问它们,如下所示(注意,我们将属性名称作为字符串传递给getattr):
代码中有几个问题
- 它是
,而不是类
类
- 定义的
和num
是实例变量,而不是类变量float
- 最后三行不是类定义的一部分,因此它们需要不包含
是属性名称的糟糕选择(即,它意味着类型是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()
之间的区别是的,我知道没有,但我想访问我刚刚创建的对象,并将objects变量乘以2。非常感谢,我要找的是getattr()函数。非常感谢,我要找的是getattr()函数。@PatrickArtner,感谢您修复了缩进-在粘贴缩进时,我没有注意到我的代码有问题。
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)