为什么Float对象不可调用?

时间:2018-07-16 11:02:38

标签: python function class oop

以下面的代码为例。为什么在使用打印语句1而不是打印语句2时出现错误“浮动对象不可调用”?如果我想使打印语句1起作用,该怎么办?

var1 = float(input())

class ExampleClass(object):
    def __init__(self, thing1):
        self.getThing1 = thing1

    def getThing1(self):
        return self.getThing1

a = ExampleClass(var1)

print(str(a.getThing1())) #print statement 1 that doesn't work
print(str(a.getThing1)) #print statement 2 that does work

2 个答案:

答案 0 :(得分:9)

您正在尝试使用getThing1作为方法名称​​和。您声明了方法getThing1,但随后您分配了self.getThing1 = thing1。所以getThing1不再是一种方法;这是thing1的值。

也许你是这个意思

class ExampleClass(object):
    def __init__(self, thing1):
        self.thing1 = thing1

    def getThing1(self):
        return self.thing1

但是,getXXX方法在Python中不是惯例。如果需要一种包装属性的方法,则应将其设置为property

答案 1 :(得分:1)

此:

class ExampleClass(object):
    def __init__(self, thing1):
--->    self.getThing1 = thing1

阴影:

   def getThing1(self):
       return self.getThing1

Python函数是对象,它们并不存在于不同的名称空间中,因此,总而言之,您不能具有相同名称的属性和方法。

解决方案很简单:不要使用getThing1作为属性名称-特别是因为“ get”是一个动词,所以它不是值的好名字。

还请注意,Python对计算属性具有字符串支持,因此您不需要系统的属性获取器/设置器。您可以从一个普通属性开始,然后在需要时将其转换为计算属性。

相关问题