Python 如果“名称”为,则访问内部变量__主要内容:一模一样

Python 如果“名称”为,则访问内部变量__主要内容:一模一样,python,python-3.x,oop,Python,Python 3.x,Oop,假设我有一个python代码abc.py import sys class xyz(): def __init__(self, xyz) self.xyz='123' def process(self): print(var) # do something with the dictionary var2 and int var3 # process the var4 panads dataframe p

假设我有一个python代码abc.py

import sys

class xyz():

   def __init__(self, xyz)  
       self.xyz='123'

   def process(self):
       print(var)
       # do something with the dictionary var2 and int var3
       # process the var4 panads dataframe
       print(var5)

if __name__ == "__main__":

  var = '123'
  var2 = {'key_a':'value_a'}
  var3 = int(3)
  var4 = a pandas dataframe getting from reading a SQL database

  if len(sys.argv[1]) == 2:
      var5 = sys.argv[1]
  else:
      raise ValueError("error")

  var6 = var5+int(123456)
如何从ifname==“main”获取变量:

我用runpy尝试了这个解决方案

出错了

ImportError: No module named abc
我希望解决方案尽可能简单,因为如果name==“main”,我需要从这里获取大量具有各种数据类型的变量:

谢谢大家!

编辑:

很多好的评论说这没有意义,我在某种程度上同意。问题是如果我没有将var5置于ifname=“main”:当我在其他脚本(如test.py)中导入并启动类xyy时,代码将失败,如下所示

import sys

var = '123'
var2 = {'key_a':'value_a'}
var3 = int(3)
var4 = a pandas dataframe getting from reading a SQL database

if len(sys.argv[1]) == 2:
   var5 = sys.argv[1]
else:
   raise ValueError("error")

var6 = var5+int(123456)

class xyz():

   def __init__(self, xyz)  
       self.xyz='123'

   def process(self):
       print(var)
       # do something with the dictionary var2 and int var3
       # process the var4 panads dataframe
       print(var5)

if __name__ == "__main__":

这个问题的提问方式有点让人困惑,但我认为你想做的是:

import sys

def main( var5 ):
    var  = 1
    var2 = 2
    var3 = 3
    var4 = 4
    var6 = "Var 5 is: " + var5

    class xyz():
       def process(self):
           print(var)
           print(var5)

    xyz().process()



if __name__ == "__main__":
    var5 = sys.argv[1]
    main( var5 )
这样,如果您以脚本形式启动文件,它可以是

python3 myscript.py "hello"
import myscript
myscript.main( 'hello' )
如果您从交互式会话导入它,它可以是

python3 myscript.py "hello"
import myscript
myscript.main( 'hello' )

PS:为了消除不必要的混乱,我稍微简化了你的例子…

你知道如果name==“main”:这个
有什么好处吗?你的奎斯汀对我来说没什么意义。如果您需要封装一些变量,将它们作为类成员放入一个类中,那么您可以访问它们。不幸的是,这是一个遗留代码,需要进行大量重构。如果我不将所有这些变量都放在“``If name==“main”:“``”中,当我从test.py导入类xyz时,它将失败。因为“``if name==“main”:“``中的某些变量是从命令行获取的。为了导入其他文件,您需要文件夹中的一个空白init.py文件。检查这是否解决了您的导入问题。这没有任何意义。如果需要从方法访问变量,为什么要在该块中定义变量?@Chubaka是的,这是没有意义的。代码到底是怎么失败的?谢谢!让我试试。我从未见过classHi@tasos中的函数在我运行python3 myscript.py“hello”时这种方法起作用。但是,如果我想在单独的test.py中对函数处理器进行单元测试,在这种情况下我如何导入xyz类?谢谢你。@Chubaka如果你想让你的类作为一个“单元”(从而可以进行单元测试),那么让它依赖于全局变量的整个方法从一开始就是有问题的。相反,定义main外部的类,并使其需要适当的初始化,这样您就可以通过使用相关变量初始化来在main中创建实例,而不是依赖于将它们作为全局变量发现的类。谢谢。最后,我为var、var2、var3、var4创建了一个新类,并将这个新类继承到以下类中。通过这样做,它完成了任务并使tests.py中的测试成为可能。