Python classes
From wikinotes
Background
Anatomy of a Class
A class is an object, that bundles together a set of related variables/functions.
Types of variables:
- attribute: a variable attached to a class instance
- class attribute: a variable whose value is shared by all instances of that class
Types of functions:
- method: a function attached to a class
- staticmethod: a function attached to a class, that can be called without first instantiating it.
- classmethod: a function attached to a class, can be called without instantiation, has access to class attributes
If you were writing a class for a car, you might have an attributespeed
. You would control that attribute using the methodsaccelerate()
andbreak()
.Python Class Example
class MyClass(object): # class <name>( <class inherits from> ) class_attr = 1 def __init__(self, *args, **kwargs): # class-creation arguments. every method # receives the keyword 'self' which refers to itself self.instance_attr = 0 def method(self): pass @staticmethod def staticmethod(self): passInheritance
When a class inherits from a parent class, it receives all of it's methods and attributes. This is referred to as composition. You class can override these methods/attributes.
class MyBaseClass(object): def printhi(self): print('hi') class MySubClass(MyBaseClass): pass
In the above example,MySubClass
is actually:class MySubClass(MyBaseClass): def printhi(self): print('hi')Multiple Inheritance
An object can inherit from multiple parents (although doing this too much can get very hairy). Inheritance is performed as a DAG. All items inheritance is calculated left-to-right.
Dynamic Classes
# ====== # Simple # ====== ## ClassName Inherits Attributes ## MyClass = type("MyClass", (object,), {} ) # =============== # With Attributes # =============== MyClass = type("MyClass", (object,), { 'x':1, 'y',:2 }) # ============ # With Methods # ============ @classmethod def testFunc_MyClass(self, myArg): print myArg MyClass = type("MyClass", (object,), { 'testFunc':testFunc_MyClass } )