Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中导入包含重载打印函数的自定义模块生成属性错误_Python_Import_Overloading_Python Import - Fatal编程技术网

在python中导入包含重载打印函数的自定义模块生成属性错误

在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

我正在使用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__.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版本之间发生变化。不要用它。