Создание класса Python из одного определения класса - PullRequest
0 голосов
/ 07 октября 2018
from collections import defaultdict 

#This class represents a directed graph using adjacency list representation 
class Graph: 
    def __init__(self,vertices): 
        self.V= vertices #No. of vertices 
        self.graph = defaultdict(list) # default dictionary to store graph 

    # function to add an edge to graph 
    def addEdge(self,u,v): 
        self.graph[u].append(v) 

    # Function that returns reverse (or transpose) of this graph 
    def getTranspose(self): 
        g = Graph(self.V) 

        # Recur for all the vertices adjacent to this vertex 
        for i in self.graph: 
            for j in self.graph[i]: 
                g.addEdge(j,i) 
        return g 

g = Graph(5)
g.addEdge(1, 0)
g.addEdge(0, 2)
g.addEdge(2, 1) 
g.addEdge(0, 3) 
g.addEdge(3, 4) 

Вышеприведенный код, кажется, работает нормально, но я запутался, как можно создать экземпляр класса в getTranspose из одного и того же класса?

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Это потому, что вся информация для создания объекта класса (т. Е. Его членов и требуемого объема памяти) уже известна в тот момент, когда вы вызываете один из его методов (в данном случае getTranspose).

Если, однако, вы попытаетесь создать экземпляр класса в своем собственном конструкторе, это приведет к бесконечной рекурсии.

class A:
    def __init__(self):
        self.a = A()  # This will lead to RecursionError being thrown
0 голосов
/ 07 октября 2018

Это потому, что когда вы вызываете класс Graph в вашем методе, это похоже на вызов конструктора Graph (метод init ) со всеми его атрибутами, и, поскольку они все уже объявлены, нет причин, почемуу меня одна проблема была однажды, но мой учитель программирования сказал мне об этом, и это имеет смысл

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...