是否可以从模块中删除方法?

2024-06-10 15:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以从python中的就绪模块中删除方法吗?最近,我试图在一个基于浏览器的交易平台上编写一个python代码,在这个平台上,他们允许我们导入python'time'包,但是time包没有sleep()方法。当我试图导入sleep方法时,它给了我属性错误。在询问该平台的技术支持人员时,我知道他们不支持sleep()方法。我只是想知道我们怎么做?它只是从包中删除方法吗?还是有更好的办法?你知道吗


Tags: 模块方法代码属性time人员错误浏览器
3条回答
import time
time.sleep(1)

del time.sleep
time.sleep(1)
                                     -
AttributeError                            Traceback (most recent call last)
<ipython-input-6-07a34f5b1e42> in <module>()
  > 1 time.sleep(1)

AttributeError: 'module' object has no attribute 'sleep'

如果您没有time.sleep方法,您可以很容易地编写自己的方法(尽管不太可能精确或高效):

def sleep(seconds):
    a = time.time()
    b = time.time()
    while b - a < seconds:
        b = time.time()

下面是我运行的一些精度测试(只有一个print语句来查看它进入循环的频率):

>>> sleep(1)
2.86102294922e-06
0.0944359302521
0.14835691452
0.198939800262
0.249089956284
0.299441814423
0.349442958832
0.398970842361
0.449244022369
0.498914003372
0.549893856049
0.600338935852
0.648976802826
0.700131893158
0.750012874603
0.800500869751
0.850263834
0.900727987289
0.950336933136
1.00087189674

精度保持在100英里秒精度。:) 你可能没有这个方法,因为他们修改了源代码,或者在你的代码开始执行之前在解释器上运行了一些东西(像其他答案一样使用del关键字)。你知道吗

可以在运行时从名称空间中删除方法(函数)。 这叫做猴子修补术。交互式会话示例:

Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> time.sleep(2)
>>> del time.sleep
>>> time.sleep(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'sleep'

但回到您最初的问题:我相信在您使用的平台上,他们可能已经用定制版本替换了几个标准库模块(包括时间模块)。因此,你应该问他们,你如何能实现你想要的延迟,而不必求助于繁忙的等待。你知道吗

相关问题 更多 >