BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #19309同步于 2017/9/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

小白求助:怎么在某个类中调用另一个类中某个方法中的变量

qwertasdfg1
2017/9/17镜像同步16 回复
我用PyQt写了个界面,然后需要获取界面中文本框中的数据,即想在LightClientFactory的send_tmp_message方法中获取到Example类中initUI方法中的jiangeEdit的数据,这两个类在同一个文件中,我是这样写的Example.initUI(Example).jiangeEdit.text(); class Example(QtGui.QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): jiange = QtGui.QLabel(u'客户端向服务器端发送数据时间间隔') # 时间间隔 jiangeEdit = QtGui.QLineEdit() class LightClientFactory(ClientFactory): def send_tmp_message(self): import datetime,json,random now=datetime.datetime.now()+datetime.timedelta(0,60) time_str=now.strftime('%Y-%m-%d %H:%M:%S') time_before=(now-datetime.timedelta(0,10)).strftime('%Y-%m-%d %H:%M:%S') # 10s before value = Example.initUI(Example).jiangeEdit.text(); 但是运行之后出现如下错误,求问如何解决呢 2017-09-17 23:12:46+0800 [-] Unhandled error in Deferred: 2017-09-17 23:12:46+0800 [-] Unhandled Error Traceback (most recent call last): File "F:\moniceshi\new\tcp-server-multi\qtreactor\qt4base.py", line 231, in _qt_timeout self._iterate(None, True) File "F:\moniceshi\new\tcp-server-multi\qtreactor\qt4base.py", line 237, in _iterate self.runUntilCurrent() File "D:\python2.7\lib\site-packages\twisted\internet\base.py", line 825, in runUntilCurrent call.func(*call.args, **call.kw) File "D:\python2.7\lib\site-packages\twisted\internet\task.py", line 239, in __call__ d = defer.maybeDeferred(self.f, *self.a, **self.kw) --- <exception caught here> --- File "D:\python2.7\lib\site-packages\twisted\internet\defer.py", line 149, in maybeDeferred result = f(*args, **kw) File "F:\moniceshi\new\tcp-server-multi\client\TCPClient.py", line 266, in send_tmp_message value9 = Example.initUI(Example).jiangeEdit.text() exceptions.TypeError: unbound method initUI() must be called with Example instance as first argument (got pyqtWrapperType instance instead)
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
chenxiansf机器人#1 · 2017/9/18
把变量变成类的成员变量啊
Flying07机器人#2 · 2017/9/18
和C++差不多吧。。。类对象做成员。。。记得C++里面有友元不过Pyhton没印象,可能没有吧
qwertasdfg1机器人#3 · 2017/9/18
抱紧大腿,具体来说怎么写呢 【 在 chenxiansf 的大作中提到: 】 : 把变量变成类的成员变量啊
jackling机器人#4 · 2017/9/18
class A: x = 1 类变量 def __init__ blablabla 定义实例变量 class B def foo(): print A.x 试试看 【 在 qwertasdfg1 的大作中提到: 】 : 抱紧大腿,具体来说怎么写呢
jadfi机器人#5 · 2017/9/18
如果没加classmethod,就是个成员方法吧,那当然不能用类来调用,要用实例调用这个方法,self参数是解释器自己传的,不需要你加上去。如果加了,就可以直接Example.init(),用实例调用也行。
qwertasdfg1机器人#6 · 2017/9/18
谢谢,我试了下这种写法是可以的,但是我想获取到的是方法initUI()中的变量jiangeEdit,而不是类中的变量 【 在 jackling 的大作中提到: 】 : class A: : x = 1 类变量 : def __init__ blablabla : ...................
qwertasdfg1机器人#7 · 2017/9/18
classmethod没有加,我想调用方法initUI()中的变量,该怎么调用呢,变量前加不加self都不行呀,谢谢您 【 在 jadfi 的大作中提到: 】 : 如果没加classmethod,就是个成员方法吧,那当然不能用类来调用,要用实例调用这个方法,self参数是解释器自己传的,不需要你加上去。如果加了,就可以直接Example.init(),用实例调用也行。
chenxiansf机器人#8 · 2017/9/18
让变量的作用域在类中或实例中,而不是在函数中。函数中的变量是不能直接访问的 【 在 qwertasdfg1 的大作中提到: 】 : 抱紧大腿,具体来说怎么写呢
jackling机器人#9 · 2017/9/18
那你就只能从 实例化的对象中去取了吧 a = A() print a.x 【 在 qwertasdfg1 的大作中提到: 】 : 谢谢,我试了下这种写法是可以的,但是我想获取到的是方法initUI()中的变量jiangeEdit,而不是类中的变量