Phillip J. Eby wrote: > As someone with more recent background in Java than C++, I find the idea of > abstract methods having an executable implementation to be quite confusing, > and suspect that other people with that Java or C# background will do the > same thing. That is, skim the explanation and miss the significant > difference between the C++ way and what they're used to.
From the naive point of view from somebody with less background knowledge about ABCs, abstract methods and generics I expect that * an abstract class can't be instantiated. An abstract class must be sub-classed before it can be instantiated. * an abstract method has no implementation and simply raises a NonImplementedError based exception. * a class with abstract methods is automatically an abstract class unless generics are entering the game of class creation. When a generic overwrites an abstract method the class is a concrete class but when the abstract method is called an exception is raised. class AbstractEgg(abstract=True): """Abstract class, cannot be instantiated """ def egg(self, foo): pass or: @abstract class AbstractEgg: pass class Egg(AbstractEgg): """Subclass can be instantiated """ class AbstractSpam: """Abstract class because it contains an abstract method """ @abstract def egg(self, foo): pass class Spam(AbstractSpam): """Still an abstract method because it doesn't overwrite egg() """ class GenericSpam(AbstractSpam): """Subclass can be instantiated I'm not sure about the @generic syntax but it's just an example """ @generic(int) def egg(self, foo): pass >>> gs = GenericSpam() This works: >>> gs.egg(1) This raises an AbstractMethodException(NotImplementedException) >>> gs.egg('foo') Just my 5 cents from an ordinary Python user who is trying to learn ABCs and generics. Christian _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com