【问题标题】:Stuck in Python official tutorial docs卡在 Python 官方教程文档中
【发布时间】:2023-02-25 18:15:14
【问题描述】:

一段需要特定抽象数据类型的 Python 代码 通常可以传递一个模拟该数据方法的类 改为键入。例如,如果你有一个函数可以格式化一些 来自文件对象的数据,您可以使用方法定义一个类read()readline() 从字符串缓冲区获取数据,并且 将其作为参数传递。

实例方法对象也有属性:m.__self__ 是 方法为m()的实例对象,m.__func__是 方法对应的函数对象。

我被困在 Python tutorial doc,我无法理解上面的文档。任何人都可以用通俗易懂的方式解释一下吗?

【问题讨论】:

    标签: python


    【解决方案1】:

    一段需要特定抽象数据类型的 Python 代码通常可以传递给模拟该数据类型的方法的类。例如,如果您有一个从文件对象格式化某些数据的函数,您可以定义一个类,其方法为 read() 和 readline(),从字符串缓冲区获取数据,并将其作为参数传递。

    考虑这样的事情。

    def get_first_line_twice(file):
        line = file.readline()
        return line + line
    

    这是“一段需要特定抽象数据类型的 Python 代码”。在这种情况下,“特定的抽象数据类型”是一个文件。

    “一个模拟该数据类型的方法的类”是指一个类也有一个行为类似的readline()方法。例如。

    class Foo:
        def readline(self):
            return "foo"
    

    我们可以将 Foo 的实例而不是文件传递给我们的第一个函数,它将正常工作。这就是段落的意思。

    实例方法对象也有属性:m.__self__是方法m()的实例对象,m.__func__是方法对应的函数对象。

    考虑前面示例中的 Foo 类。

    f = Foo()
    f.readline #the method
    
    f #"the instance object with the method"
    f.readline.__self__ is f #True
    
    f.readline.__func__ #"the function object corresponding to the method"
    

    最后一行基本上返回与f 分离的readline。如果我们想调用它,我们实际上需要传递一个对象作为self参数,即f.readline.__func__(f)。或者f.readline.__func__(some_other_object)。这对于高级函数式编程或反射可能很有用。作为初学者,您现在可以忽略这些属性。

    【讨论】:

      猜你喜欢
      • 2022-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2014-11-15
      • 1970-01-01
      • 2011-07-10
      • 2011-09-07
      相关资源
      最近更新 更多