可以为不同的类变量调用相同的方法

时间:2018-12-23 17:24:33

标签: 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)

我希望输出为6和18

2 个答案:

答案 0 :(得分:1)

代码中有几个问题

  • 它是class,而不是Class
  • 定义为numfloat的是实例变量,而不是类变量
  • 最后三行不是类定义的一部分,因此必须缩进
  • 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.numself.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