Hi,
I need to create many instances of a class D that inherits from a class B. Since the constructor of B is expensive I'd like to execute it only if it's really unavoidable. Below is an example and two workarounds, but I feel they are not really good solutions. Does somebody have any ideas how to inherit the data attributes and the methods of a class without calling it's constructor over and over again?
Thank,
Christian
Here's the "proper" example:
class B: def __init__(self, length): size = self.method(length) self.size = size def __str__(self): return 'object size = ' + str(self.size) def method(self, length): print 'some expensive calculation' return length
class D(B): def __init__(self, length): B.__init__(self, length) self.value = 1
if __name__ == "__main__": obj = D(7) obj = D(7)
Here's a workaround:
class B: def __init__(self, length): size = self.method(length) self.size = size def __str__(self): return 'object size = ' + str(self.size) def method(self, length): print 'some expensive calculation' return length
class D(B): def __init__(self, object): for key, value in object.__dict__.iteritems(): setattr(self, key, value) self.value = 1
if __name__ == "__main__": tmp = B(7) obj = D(tmp) obj = D(tmp)
Here's another workaround:
Bsize = 0 class B: def __init__(self, length): size = self.method(length) self.size = size global Bsize Bsize = self.size def __str__(self): return 'object size = ' + str(self.size) def method(self, length): print 'some expensive calculation' return length
class D(B): def __init__(self, length): self.size = Bsize self.value = 1
if __name__ == "__main__": B(7) obj = D(9) obj = D(9)
-- http://mail.python.org/mailman/listinfo/python-list