Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 可以为不同的类变量调用相同的方法吗_Python_Python 3.x_Python 2.7 - Fatal编程技术网

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)