Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不干扰python中的旧对象的情况下创建全新的对象?_Python_Oop - Fatal编程技术网

如何在不干扰python中的旧对象的情况下创建全新的对象?

如何在不干扰python中的旧对象的情况下创建全新的对象?,python,oop,Python,Oop,我对python非常陌生,因为它面临下面定义的这个问题。 我正在从这个名为“Node”的类中创建几个图形 我的图形生成函数是 # Generating the graph def generate_graph(self, text, startnode, endnode): sentences = self.convert_to_sentences(text) sentences = [sentence.replace(",","") for se

我对python非常陌生,因为它面临下面定义的这个问题。 我正在从这个名为“Node”的类中创建几个图形

我的图形生成函数是

    # Generating the graph
    def generate_graph(self, text, startnode, endnode):
        sentences = self.convert_to_sentences(text)
        sentences = [sentence.replace(",","") for sentence in sentences]
        while(" ." in sentences):
            sentences.remove(" .")

        length = len(sentences)
        self.START = startnode
        self.END = endnode
        G = nx.Graph()
        G.add_node(self.START)
        G.add_node(self.END)
        for i in range(0, length):
            words = sentences[i].split()
            sent_size = len(words)
            v = [Node() for i in range(sent_size)]
            for j in range(0, sent_size):
                label = words[j]
                tag = nltk.pos_tag(nltk.word_tokenize(label))[0][1]

                if self.exists_node(self.START, label, tag):
                    v[j] = self.get_existing_node(self.START, label, tag)
                else:
                    v[j] = self.create_new_node(label, tag)
                    G.add_node(v[j])
                if j==0:
                    tup = (v[j],)
                    self.START.nexts = self.START.nexts + tup
                    G.add_edge(self.START, v[j])
                if v[j].label == ".":
                    self.add_edge(v[j], self.END)
                    G.add_edge(v[j], self.END)
                if not self.exists_edge(v[j-1], v[j]):
                    self.add_edge(v[j-1], v[j])
                    G.add_edge(v[j-1], v[j])

        Nodes = []
        graph_size, Nodes = self.graph_size(self.START)
        for i in range(0, graph_size):
            print(Nodes[i].label, Nodes[i].pos_tag)
            leng = len(Nodes[i].nexts)
            for x in range(0, leng):
                print(Nodes[i].nexts[x].label, Nodes[i].nexts[x].pos_tag)
            print(" ")


        #nx.draw(G)
        paths = self.find_paths(G, self.START, self.END)
        return paths
我多次调用这个图生成函数来生成几个图,第一个图生成得非常好,但是第二个图和后续图包含了前一个图的边,也就是说,它已经包含了前一个图的状态,并且只在上面添加了新的边

考虑以下从句子生成单词级图的示例:-

梅林是一只大猫

句子1创建了一个从Merlyn->is开始的边的图形,这非常好

第二句:-梅林过去常喝牛奶

句子2创建了一个有两条边的图,分别来自Merlyn->usedMerlyn->is

第2句应该只有单条边Merlyn->used
提前感谢

所有节点变量都应该是实例级变量,而不是类级变量

class Node(object):
    def __init__(self):
        self.label = ""
        self.nexts = ()
        self.prevs = ()
        self.pos_tag = ""
        self.visited = False
        self.score = 0

所有的
节点
字段都是静态的,这可能是原因吗?欢迎使用StackOverflow。如果您对这个问题进行编辑,使其成为一个尝试过的问题,那么这个问题将得到极大的改进(并且更容易回答),但它不起作用。它是否与节点类的可变性质有关?
class Node(object):
    def __init__(self):
        self.label = ""
        self.nexts = ()
        self.prevs = ()
        self.pos_tag = ""
        self.visited = False
        self.score = 0