我给出了一些未公开的代码,这些代码可以在运行Python 3的Windows上很好地运行,但是在测试Im将该Python移开后,请运行Ubuntu 2.7.12。
我无法更改服务器上的Python版本,因为其他人正在使用它并可能会破坏其代码。
出现错误的Python类是:
import logging
# device is a test class to handle replay functions
class Device:
intermittent = False
loop = False
def __init__(self, name, mac, description, srcFile, real):
super().__init__()
self.name = name
self.MAC = mac
self.description = description
self.srcFile = srcFile
self.running = False
self.real = real
def to_dictionary(self):
data = {'name': self.name,
'mac': self.MAC,
'description': self.description,
'active': self.running,
'real': self.real}
return data
def start(self):
logging.debug("starting " + self.name)
self.running = True
def resume(self):
logging.debug("resuming " + self.name)
self.running = True
def stop(self):
logging.debug("stopping " + self.name)
self.running = False
我了解Python 3的面向对象语法与2.7不同,如何更改此类以与Python 2.7一起使用?
谢谢
答案 0 :(得分:1)
super
的零参数调用是Python 3的新功能。如果要编写交叉兼容的代码,则不能使用它。有关详细信息,请参见PEP 3135 -- New Super。
如何更改此类以与Python 2.7一起使用?
首先,应将行class Device:
更改为继承object
,以使您拥有new-style class。
(可选)将from future import unicode_literals
添加到模块的开头。由于您在日志记录调用中使用字符串添加,因此如果您处理Device
属性中的文本数据,则可能需要使用字符串添加。但是,解决该问题的更好方法可能是在日志调用中使用%格式的字符串,例如:
logging.debug("starting %s", self.name)
最后一行
super().__init__()
可以更改为
super(Device, self).__init__()
在所有其他条件都相同的情况下,您的代码现在看起来是交叉兼容的。
尽管,我想知道为什么您在这里完全使用super
,但似乎并不需要。