引用类作为全局变量和引用实例作为全局变量的差别

引用实例作为全局变量

import logging,  configparser, sys, os, json,  time, logging, sseclient, urllib3,re, threading, pandas as pd, datetime, requests
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
from strategy.w_BigMidSmall_liangbi_pool import w_bms_liangbi

class thread1(threading.Thread):
    def __init__(self):
        super(thread1, self).__init__()
        self.ok = 'ok'


    def func1(self,arg):
        print('func1', arg)

    class thread2(threading.Thread):
        def __init__(self):
            global thread1 #这里引用的是实例,不是类,因为 thread1在后面被创建了实例
            threading.Thread.__init__(self)

        def run(self) -> None:
            print('i am sub')
            thread1.func1( 1)  #用实例来执行函数,不用self
            thread1.func1(thread1.ok)  #用实例来执行函数,不用self

    def run(self) -> None:
        print('i am main')
        t1 = self.thread2()
        t1.start()

thread1 = thread1()
thread1.start()

下面是把类作为全局变量,不建议采用,因为属性值不好获取

import logging,  configparser, sys, os, json,  time, logging, sseclient, urllib3,re, threading, pandas as pd, datetime, requests
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
from strategy.w_BigMidSmall_liangbi_pool import w_bms_liangbi

class thread1(threading.Thread):
    def __init__(self):
        super(thread1, self).__init__()
        self.ok = 'ok'


    def func1(self,arg):
        print('func1', arg)

    class thread2(threading.Thread):
        def __init__(self):
            global thread1   #这里引用的是类
            threading.Thread.__init__(self)

        def run(self) -> None:
            print('i am sub')
            thread1.func1(self, 1)  #调用父类函数,必须加self,或者用thread1
            thread1.func1(self, thread1().ok) #调用父类函数,必须加self,或者用thread1,如果引用父类实例的属性值,还必须再次实例一次,但有可能和真正的实例属性是不同的,所以不要用这种写法

    def run(self) -> None:
        print('i am main')
        t1 = self.thread2()
        t1.start()

t = thread1()
t.start()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值