Python 类,并将模块导入到类中

Python 类,并将模块导入到类中,python,Python,自从我使用python以来,我几乎没有做过OOP,我试图熟悉编写类等等 import sys import xml.etree.ElementTree as etree # All imports at the top of the file! class Parser(object): def __init__(self, file_name): self.file_name = file_name def display(self, rename_this

自从我使用python以来,我几乎没有做过OOP,我试图熟悉编写类等等

import sys
import xml.etree.ElementTree as etree # All imports at the top of the file!

class Parser(object):
    def __init__(self, file_name):
        self.file_name = file_name

    def display(self, rename_this_variable):
        tree = etree.parse(self.file_name)
        for node in tree.getiterator():
            for element in rename_this_variable:
                if element in node.tag:
                    print(node.tag)

list2 = ['KeyId','X509SerialNumber','CompositionPlaylistId']
# Worth a mention: rename this to something that's actually meaningful!

fname = sys.argv[1]
instance = Parser(fname)
instance.display(list2)
如何将下面的类分解为另一个函数。我不想向类传递两个参数,而是首先传递fname,然后为我要打印的所有xml内容调用一个名为display的方法。当我尝试这样做时,我的树出现了全局名称问题

import sys
class Parser(object):

    def __init__(self, file_name, mylist):

        import xml.etree.ElementTree as etree
            self.file_name = file_name
            tree = etree.parse(self.file_name)
            for node in tree.getiterator():
                for element in mylist:
                    if element in node.tag:
                        print(node.tag)

list2 = ['KeyId','X509SerialNumber','CompositionPlaylistId']
fname = sys.argv[1]
myfileinstance =Parser(fname,list2)

只需创建一个新方法来完成您希望该方法完成的任务(当然我是在猜测,因为您实际上还没有向我们展示更像您想要的代码…)。您的
\uuuu init\uuuu
方法应该只包含创建对象所需的逻辑——通常这意味着分配实例变量等等

import sys
import xml.etree.ElementTree as etree # All imports at the top of the file!

class Parser(object):
    def __init__(self, file_name):
        self.file_name = file_name

    def display(self, rename_this_variable):
        tree = etree.parse(self.file_name)
        for node in tree.getiterator():
            for element in rename_this_variable:
                if element in node.tag:
                    print(node.tag)

list2 = ['KeyId','X509SerialNumber','CompositionPlaylistId']
# Worth a mention: rename this to something that's actually meaningful!

fname = sys.argv[1]
instance = Parser(fname)
instance.display(list2)

为什么要导入
\uuuu init\uuuu
中的内容?除非有很好的理由去做其他事情,否则你所有的导入都应该放在文件的顶部。“我最终在树上出现了全局名称问题”是什么意思?“我试图这么做”到底是什么意思?请向我们展示您尝试的实际代码,以及发生的确切情况,否则我们可能无法帮助您调试它。非常简单。让
\uuuu init\uuuu()
的主体成为
self.file\u name=file\u name
并创建一个新方法,其主体是该代码的其余部分。是的,我认为在类中导入是一个糟糕的主意,而不是在文件的顶部。谢谢这正是我想做的!!