问题描述
我有一个类(名为MyClass)和一个函数(名为MyFunct)。
当我打印它时,可以,但是当我使用.format时,我会遇到一些问题:
class MyClass:
var = 2
def MyFunct(numb):
return numb + 1
print(MyClass.var)
>>> 2
print(MyClass.MyFunct(5))
>>> 6
print("{.var}".format(MyClass))
>>> 2
print("{.MyFunct(5)}".format(MyClass))
>>> AttributeError: type object 'MyClass' has no attribute 'MyFunct(5)'
出于某种原因,我需要使用.format,并且我想添加添加功能的可能性:/
感谢您的帮助
解决方法
python中的
string.Formatter类只能解析参数,他无法执行任何操作 https://docs.python.org/3.4/library/string.html#string.Formatter.vformat
print("{.+4}".format(1))
AttributeError:“ int”对象没有属性“ +4”
1.+4
5
如果要执行某些操作,请使用格式字符串:
print(f"{MyClass.MyFunct(5)}")
,
编写表达式时:
MyClass.MyFunct(5)
请注意,有两件事以非常特定的顺序发生。为了说明这一点,我将其编写为两行单独的代码:
f = MyClass.MyFunct
f(5)
这等效于开头提到的单行。请注意,首先评估MyClass.MyFunct
,然后从"MyFunct"
获取名为MyClass
的属性并返回一个函数对象。只有在这种情况下,才使用参数5
调用函数对象。
由此您可以看到,您不是正在获得名为MyClass
的{{1}}属性。没有这样的属性,只有"MyFunct(5)"
和"var"
。但这就是您要"MyClass"
要做的-它所能做的就是获取属性,而不是像别人所说的执行方法。