Python's str() function not actually a function?
我的印象是像str(5)这样的函数在整数5上调用str函数。但当您在解释器中键入str时:
所以str实际上是一个类,这使得类似if type(a) is str的代码更有意义。但是,为什么str在文档的"内置功能"下列出?这只是一个简单化吗?
- stris the name of the ctor for the str舱,本质。
把它列为函数有点简单,是的。但请记住,类是可调用的*—这就是创建类实例的方法!
如果它对您有帮助,可以将str(5)看作是从数字5构造一个字符串。
请注意,所有其他内置类型都以相同的方式存在:int()、float()、str()、tuple()、list()、set()、file()…它们都是类,但是可以调用它们来构造类的实例,并且通常接受另一个类型的实例作为参数(如果适用)。
*:至少大多数时候。
- 哪个类不可调用?
- 抽象类。因为不能有抽象类本身的实例,所以不能调用它。(好吧,你可以叫它,但它总是会引发一个例外。)
- 谢谢你的回复。所以,仍然可以安全地说每个类都是可调用的,或者至少每个类都有一个__call__方法。
- 对。所有类都是可调用的;有些类在调用它们时不做任何有用的事情。
str(5)实际上在str类上调用__call__()函数:
1 2 3 4
| >>> str(5)
'5'
>>> str.__call__(5)
'5' |
所以是的,str的行为就像函数和类(或者2.7之前版本中的类型)一样。
- 注意,这是所有函数调用的工作方式。每个函数上都有一个__call__方法。(包括__call__本身的功能;它是一路向下的乌龟!)
我认为查看它的简单方法是str()返回str类的一个实例。