do所有的方法后面都跟一个点(.)或者只是其中的一部分我们如何定义它不需要点?

iyfjxgzm  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(255)

我通过python速成课程学习python,并附带了这个字符串和方法。它只说名字后面的点(.)在 name.title() 告诉python使 title() 方法对变量名进行操作。

bq3bfh9z

bq3bfh9z1#

并非总是可以动态创建方法:

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 对象

nvbavucw

nvbavucw2#

上面的答案很精确,但我想补充一点。
实际上,方法是将对象作为参数的函数,然后根据这些参数返回值。由于python是一种面向对象的语言,因此python中的所有内容都是对象。
当你打电话的时候 name.title() :然后,python搜索 title() 方法 name 对象。由于所有方法都指定将对象作为参数:

`def title(self):
    ...+
`

这就是类和 self 这里的参数表示调用该方法的对象。我们不必显式地指定它,python解释器可以识别它。
与你的情况一样: name.title() 调用该方法的对象 title()name 所以这里是可变的 self 被指定为的值 name 这就是函数调用 name.title() 相当于 title(name) 但前者是调用方法的正确语法,而后者是用于压缩目的。
如果你跑 title(name) 这肯定会引起一个错误。但是, title() 方法属于 str 你随时都可以打电话来上课 str.title(name) .
希望我没有把你弄糊涂,而是把它说得更清楚了……快乐编码……)

相关问题