在python中导入包含重载打印函数的自定义模块生成属性错误
我正在使用Pycharm IDE。我正在尝试导入一个文件,这会导致属性错误。我创建了一个Python文件testing.py:在python中导入包含重载打印函数的自定义模块生成属性错误,python,import,overloading,python-import,Python,Import,Overloading,Python Import,我正在使用Pycharm IDE。我正在尝试导入一个文件,这会导致属性错误。我创建了一个Python文件testing.py: import decimal def print(num, round_digits=3): if (type(num) == float or type(num) == decimal.Decimal) and round_digits >=0: __builtins__.prin
import decimal
def print(num, round_digits=3):
if (type(num) == float or type(num) == decimal.Decimal) and round_digits >=0:
__builtins__.print(round(num, round_digits))
else:
__builtins__.print(num)
在同一目录中,我编写了一个文件test.py:
import testing
testing.print(0.17 * 0.3064,2)
运行此文件会产生以下错误:
Traceback (most recent call last):
File "C:/Users/anura/PycharmProjects/pythonProject/test.py", line 3, in <module>
testing.print(0.17 * 0.3064,2)
File "C:\Users\anura\PycharmProjects\pythonProject\testing.py", line 5, in print
__builtins__.print(round(num, round_digits))
AttributeError: 'dict' object has no attribute 'print'
回溯(最近一次呼叫最后一次):
文件“C:/Users/anura/PycharmProjects/pythonProject/test.py”,第3行,在
测试.打印(0.17*0.3064,2)
文件“C:\Users\anura\PycharmProjects\pythonProject\testing.py”,第5行,打印
__内置打印(四舍五入(数字、四舍五入数字))
AttributeError:“dict”对象没有属性“print”
您想要使用的是,而不是\uuuuuuuuuuuuuuu
。\uuuuu内置\uuuuu
的内容是一个实现细节
所以把你的代码改成
import builtins
import decimal
def print(num, round_digits=3):
if (type(num) == float or type(num) == decimal.Decimal) and round_digits >=0:
builtins.print(round(num, round_digits))
else:
builtins.print(num)
另外一个建议是:您可能希望将
type(num)=float
替换为isinstance(num,float)
。允许给定类的子类。谢谢。我仍然不了解内置和内置的区别。根据文档内置
“提供对Python所有“内置”标识符的直接访问”<代码>\uuuu内置\uuuu是一个内部细节。它可能在那里,也可能不在那里,你不应该依赖它。Python的不同实现(CPython、pypypy等)可能会以不同的方式使用它(或者根本不使用),甚至可能在Python版本之间发生变化。不要用它。