我可以在班上有一个名为print(或类似)的方法吗?

时间:2014-03-29 09:19:36

标签: python class methods printing naming

在我的Windows 7上使用PyCharm(社区版)时,我可以有这样的课程:

class X:
    def __init__(self):
        self.x = 0
    def print(self):
        print('x:', x)

正常使用:

>>> x = X()
>>> x.print()
0

此代码运行没有问题。 但是,当我使用gedit和终端(python x_file.py)在我的Ubuntu上运行相同的代码时,我收到一个错误:

$ python main.py
  File "main.py", line 6
    def print(self):
            ^
SyntaxError: invalid syntax

为什么不同,我是否允许在类中使用名为print的方法,或者这只是PyCharm的功能之一?

3 个答案:

答案 0 :(得分:1)

在python3中绝对没有问题,但是在python2中有一个print 语句,它阻止你将它用作标识符,包括方法名称。

看起来你在Ubuntu上有python2而在Windows上有python3,因此不同。

如果你想避免python2中的print语句,请添加:

from __future__ import print_function

在文件的顶部,你应该获得python3的print函数,从而允许你定义一个名为print的方法,(参见this文档)。 / p>


另请注意,如果没有__future__导入,则在python3中输入以下行:

print('x:', x)

输出:

x: <value for x>

然而,在没有的python2 中你得到了特殊的导入:

('x:', <value for x>)

因为(...)没有指定函数的参数,但是被解释为要由语句打印的元组。

答案 1 :(得分:0)

你的ubuntu python版本是否低于3?因为Python 2使用:

print "test"

和Python 3使用:

print("test")

答案 2 :(得分:0)

在python 2+中print是一个特殊的语句,如breakreturnraise等等。您不能通过创建具有相同名称的对象来覆盖它们。在python 3+中print是一个函数,参数是括号之间的字符串。可以在python中覆盖内置函数,这样就可以在python 3中定义自己的print(甚至在类之外)。 在你的特定例子中,PyCharm可能基于python 3,在你的ubuntu机器上你有&#39; 2.something&#39;。

偏离主题:覆盖内置通常不是一个好主意。