【问题标题】:Are all methods are preceded by a dot(.) or just some of them. How do we define it needs a dot or not?是所有方法前面都有一个点(。)还是其中一些。我们如何定义它是否需要一个点?
【发布时间】:2021-09-19 00:54:50
【问题描述】:

我在使用 Python Crash Course 学习 Python 时遇到了这个字符串和方法的事情:它只说 name.title() 中名称后的点 (.) 告诉 Python 使 title() 方法作用于变量名称.

【问题讨论】:

    标签: python python-3.x methods


    【解决方案1】:

    并非总是如此,您可以动态创建方法:

    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对象填充。

    【讨论】:

    • 非常感谢!
    • @user15944873 很乐意为您提供帮助,如果您是 SO 新手,您可以接受您认为最有用的答案(我不强调我的 ;))。
    【解决方案2】:

    上面的答案很准确,但我想补充一下。

    实际上,方法是将对象作为参数,然后基于该参数返回值的函数,因为 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)

    希望我没有让你感到困惑,而不是让它更清晰......快乐编码..:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 2019-08-17
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多