根据以下代码片段:

import time

def custom_time():
    return time.time()

class TimeWrapper:
    builtin_time = time.time
    def print_builtin(self):
        print(self.builtin_time())

    custom_time = custom_time
    def print_custom(self):
        print(self.custom_time())

wrapper = TimeWrapper()

wrapper.print_builtin()
# 1660163626.7973292
wrapper.print_custom()
# TypeError: custom_time() takes 0 positional arguments but 1 was given
time.time(wrapper)
# TypeError: time.time() takes no arguments (1 given)
custom_time(wrapper)
# TypeError: custom_time() takes 0 positional arguments but 1 was given

我不明白为什么wrapper.print_builtin()是有效的. 难道它不应该等同于time.time(wrapper)吗?

C implementation开始的unused论点有什么联系吗? 如果不是这样,我仍然对这个未使用的变量感兴趣.

推荐答案

time.time的类型是builtin_function_or_method,而不是function.此类对象不实现描述符协议:

>>> time.time.__get__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute '__get__'

因此,self.builtin_time只返回time.time,而不是将self作为第一个参数隐式传递给time.timemethod对象.

也就是说,self.builtin_time()time.time()完全相同,而不是time.time(self).

Python相关问答推荐

如何检测背景有噪的图像中的正方形

如何避免Chained when/then分配中的Mypy不兼容类型警告?

在Wayland上使用setCellWidget时,try 编辑QTable Widget中的单元格时,PyQt 6崩溃

无法使用requests或Selenium抓取一个href链接

pandas:排序多级列

Pandas—在数据透视表中占总数的百分比

当点击tkinter菜单而不是菜单选项时,如何执行命令?

使用Python从URL下载Excel文件

Plotly Dash Creating Interactive Graph下拉列表

Python全局变量递归得到不同的结果

如何将数据帧中的timedelta转换为datetime

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

Flask运行时无法在Python中打印到控制台

Python pint将1/华氏度转换为1/摄氏度°°

分解polars DataFrame列而不重复其他列值

Django更新视图未更新

Stats.ttest_ind:提取df值

将鼠标悬停在海运`pairplot`的批注/高亮显示上

生产者/消费者-Queue.get by list

使用_in链接操作管道传输的中间结果是否可用于链中的后续函数?