【发布时间】:2021-09-19 00:54:50
【问题描述】:
我在使用 Python Crash Course 学习 Python 时遇到了这个字符串和方法的事情:它只说 name.title() 中名称后的点 (.) 告诉 Python 使 title() 方法作用于变量名称.
【问题讨论】:
标签: python python-3.x methods
我在使用 Python Crash Course 学习 Python 时遇到了这个字符串和方法的事情:它只说 name.title() 中名称后的点 (.) 告诉 Python 使 title() 方法作用于变量名称.
【问题讨论】:
标签: python python-3.x methods
并非总是如此,您可以动态创建方法:
from types import MethodType
def fn(x):
return x.var
class A:
def __init__(self):
self.var = 20
obj = A()
method_ = MethodType(fn, obj)
print(method_)
print(method_())
输出:
<bound method fn of <__main__.A object at 0x000001C5E3F01FD0>>
20
方法是MethodType 类型的实例,并且它还绑定了一个对象,当方法被调用时,它的第一个参数将始终被该对象填充。这里fn()函数的第一个参数(x)将被obj对象填充。
【讨论】:
上面的答案很准确,但我想补充一下。
实际上,方法是将对象作为参数,然后基于该参数返回值的函数,因为 python 是一种面向对象的语言,因此 python 中的所有内容都是一个对象。
当您致电name.title() 时:
然后,python 搜索title() 对象的title() 方法。并且所有方法都指定以对象作为参数:
`def title(self):
...+
`
这是类中方法定义的样子,这里的self 参数代表调用该方法的对象。
而且我们不必明确指定它被python解释器识别。
在您的情况下:name.title() 调用方法 title() 的对象是 name 变量,因此这里 self 被分配了 name 的值,即函数调用 name.title() 等效于 @ 987654332@,但前者是调用方法的正确语法,而后者是为了理解目的。
如果您运行title(name),它肯定会引发错误。
但是,由于title() 方法属于str 类,您始终可以调用str.title(name)。
希望我没有让你感到困惑,而不是让它更清晰......快乐编码..:)
【讨论】: