In this class there is no attribute called “a” then how x.a is considered ? Similarly what is “x.a.b”, “x.a.b.c”, “x.a.b.c.d”, “x.a.b.c.d.e” and how are they considered ?Is b is an attribute of x.a in the case of “x.a.b” and c is a attribute of x.a.b in the case of “x.a.b.c” ? Explain breifly !!! I am totally confused 😵
class Node : def __init__(self, data = None, next = None) : self.data = data self.next = next x = Node(50) x.a = Node(40) x.a.b = Node(30) x.a.b.c = Node(20) x.a.b.c.d = Node(10) x.a.b.c.d.e = Node(5) print(x.a.b.c.d.e.data)
Advertisement
Answer
I suppose that similar to the declaration of the first variable x
, x.a
is an implicit initialization of that variable. x
doesn’t exists until you initialize it, so does x.a
.
So by initializing x.a
you first need x
to exists, that mean you cannot do something like
class Node : def __init__(self, data = None, next = None) : self.data = data self.next = next x = Node(50) x.a = Node(40) # Then try to create the chain until C without creating first b x.a.b.c = Node(20)
If you test it out it will point
Traceback (most recent call last): File "<stdin>", in <module> AttributeError: 'Node' object has no attribute 'b'
So in short. I think that even though the Node class has no attributes, the chain is just creating child nodes to the first variable.
x |_ Node() -> self, data, next |_ a _ |_ Node () -> self, data, next |_ b _ |_ Node () -> self, data, next |_ c _ |_ ...
Notice that as mentioned by quamrana, only a
is directly attached to x
.