On Thu, Dec 01, 2005 at 03:51:05PM -0800, Mr.Rech wrote: [...] > Suppose I have a bunch of classes that represent slightly (but > conceptually) different object. The instances of each class must behave > in very similar manner, so that I've created a common class ancestor > (let say A) that define a lot of special method (such as __getattr__, > __setattr__, __len__ and so on), and then I've created all my "real" > classes inheriting from it: > > >>>class A(object): > .... # here define all special and some common methods > > >>> class B(A): > .... # this is the first "real" class > > >>> class C(A): > .... # and this is the second > > and so on. The problem I'm worried about is that an unaware user may > create an instance of "A" supposing that it has any real use, while it > is only a sort of prototype. However, I can't see (from my limited > point of view) any other way to rearrange things and still get a > similar behaviour.
>>> class A(object): >>> ... def __init__(self, foo): >>> ... if self.__class__ is A: >>> ... raise TypeError("A is base class.") >>> ... self.foo = foo >>> ... >>> class B(A): ... pass ... >>> class C(A): ... def __init__(self, foo, bar): ... A.__init__(self, foo) ... self.bar = bar ... >>> a = A(1) Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 4, in __init__ TypeError: A is base class. >>> b = B(1) >>> b.foo 1 >>> c = C(1, 2) >>> c.foo, c.bar (1, 2) >>> HTH --Inyeol Lee -- http://mail.python.org/mailman/listinfo/python-list