以下面的代码为例。为什么在使用打印语句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
答案 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对计算属性具有字符串支持,因此您不需要系统的属性获取器/设置器。您可以从一个普通属性开始,然后在需要时将其转换为计算属性。