"maser" <[EMAIL PROTECTED]> wrote > Thanks, Andreas. Why do we need to use classmethod/ > staticmethod and where do we need to use them ?
Although there are minor technical details where they differ static methods and class methods are nearly identical. The names come from two programming traditions with different names for the same thing. Smalltalk and Lisp etc use class method. Delphi, C++ and Javba use static method. In terms of usage they are both the same and have two basic purposes: 1) As per my earlier response and example to do something to the entire class of objects, either select one instance using some kind of search mechanism - database queries are often coded in class methods, or a count of all instances (perhaps with filters which is similar to a database sel;ect) or it can be conversions of one type/class to another. And this can in turn be a kind of factory method or pseudo constructor. 2) class methods can also be used to provide generic collections of functions, perhaps with some shared data/variables. Booch called these "Class Utilities" in his book. They could for example provide a pseudo object interface to legacy code or provide namespace protection for a commonly used data name. The second form can usually be provided with functions in a module in Python but thats not the case in some other languages. As a practical example of the former consider a client/server application where the client sends requests to the server specifying the class and instance and method of the target object. The interprocess message handler can delegate the message to a class method to look up the instance and in turn call the actual method of the returned instance. This is much lighter weight than using a full blown Object Request Broker but provides a simar level of decoupling and ease of use in the client code. I've built several systems using this pattern and the RPC code hardly changes. Another example is where you need to produce highly dynamic object systems with lots of introspection and varying object structures. This is rarely needed in Python because the built in introspection is so good but in languages like C++ it may be the easiest way of creating new "classes" (not objects) in real time (although in truth these "classes" are restricted to new data members and accessor methods) One practical case using this was a hospital diagniosis system where doctors needed to be able to introduce new subclasses of disease/diagnosis and have these classes merge seamlessly with the base hard coded disease classes. Static methods were used to maintain dictionaries of dictionaries representing the sub classes and their features. These could then be passed to the instances as required and the instances performed a similar kind of attribute access to that used by Python. Its probably worth saying that these kinds of uses are powerful when needed but they are not by any means needed in every program. Although once you use them you tend to find more uses for them than you previously expected! :-) HTH, -- Alan Gauld Author of the Learn to Program web site http://www.freenetpages.co.uk/hp/alan.gauld _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor