我有一个班级:
class Window(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.USB
def setPort(self, text):
if text == 'ttyUSB0':
USB = serial.Serial(
port='/dev/ttyUSB0',\
baudrate=9600,\
parity=serial.PARITY_NONE,\
stopbits=serial.STOPBITS_ONE,\
bytesize=serial.EIGHTBITS,\
writeTimeout=0)
我想在这个类的几个方法中使用self.USB变量作为全局变量。
def refreshTIME(dummy):
dummy.USB.write('3')
我收到了一个错误:
self.USB
AttributeError: 'Window' object has no attribute 'USB'
它不应该是一个全局变量,并且在这个类的每个方法中都可见吗?
答案 0 :(得分:1)
您不想在此处使用全局变量。一般来说,不鼓励使用全局变量,因为它们会导致混乱的意大利面条代码。
在__init__
方法中,您尝试访问实例变量USB
。它在那时不存在所以你必须设置它:
class Window(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.USB = None # sets the variable
self.USB # accesses the variable
此外,setPort
的代码设置本地变量USB
的值,而不是实例变量的值。您可以使用self.USB
执行此操作:
class Window(QtGui.QMainWindow):
# ... rest of class ...
def setPort(self, text):
if text == 'ttyUSB0':
self.USB = serial.Serial(port='/dev/ttyUSB0',
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
writeTimeout=0)
注意:您也不需要行末的\
。
最后,您应该能够访问USB实例变量:
def refreshTIME(dummy):
dummy.USB.write('3')
myWindow = Window()
refreshTIME(myWindow)
您还应该考虑将refreshTIME
函数作为方法放入Window
类。
答案 1 :(得分:0)
在定义函数 init 时定义self.USB。
self.USB = "something"
答案 2 :(得分:0)
您应该在__init__
方法中添加:
self.USB = None # or give it another initial value
然后,当您想在类的其他方法中使用此变量时,用法如下:
self.USB = xxx # some opertations
答案 3 :(得分:-1)
我有这个代码,这是一种非常奇怪的方式来使用命名空间 这是你想做的事吗?
class A(object):
def __init__(self,x):
if x is None:
self.name = 'unknown'
else:
self.name = x
print 'class A created'
print 'y' in dir()
class Window(A):
def __init__(self,name, parent=None):
super(Window, self).__init__(parent)
self.name = name
self.USB = ['SOME_thing']
y = self.USB
global y
print 'clas Window created'
print 'y' in dir()
w = Window('Try1')
print '\ninstance w created'
print 'y' in dir()
def refreshTIME(dummy=y):
dummy[0] = dummy[0].lower()
print 'function refreshTime created'
print 'y' in dir()
print '------------'
print 'w.name ==',w.name
print 'w.USB ==',w.USB
print 'y ==',y
refreshTIME()
print 'w.name ==',w.name
print 'w.USB ==',w.USB
print 'y ==',y
结果
class A created
False
clas Window created
False
instance w created
True
function refreshTime created
True
------------
w.name == Try1
w.USB == ['SOME_thing']
y == ['SOME_thing']
w.name == Try1
w.USB == ['some_thing']
y == ['some_thing']