class Employee: ' Base class for all employees ' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary
empCount Variable is a class variable , Its value will be shared among all instances of this class . You can use it in internal or external classes Employee.empCount visit .
The first method __init__() Method is a special method , A constructor or initialization method called a class , This method is called when an instance of this class is created
self Represents an instance of a class ,self Required when defining methods of a class , Although it is not necessary to pass in the corresponding parameters when calling .(self Represents an instance of a class , Not class )
Key words are commonly used in other programming languages of instantiation classes new, But in Python There is no such keyword in , Class instantiation is similar to function call .
The following uses the name of the class Employee To instantiate , And pass __init__ Method receive parameters .
emp1 = Employee("Zara", 2000)
emp1.age = 7 # Add one 'age' attribute emp1.age = 8 # modify 'age' attribute del emp1.age # Delete 'age' attribute
__dict__ : Attributes of a class ( Include a dictionary , Consists of data properties of a class )
__doc__ : Document string for class
__name__: Class name
__module__: Module of class definition ( The full name of the class is '__main__.className', If the class is in an import module mymod in , that className.__module__ be equal to mymod)__bases__ : All parent elements of a class ( Contains a tuple of all parent classes )
Python The simple technique of reference counting is used to track and recycle garbage .
An internal tracking variable , Called a reference counter .
When the object is created , You create a reference count , When this object is no longer needed , in other words , The reference count for this object changes to 0 when , It's recycled . But recycling is not " immediately " Of , By the interpreter at the right time , Reclaim the memory space occupied by garbage objects .
Python The garbage collector of is actually a reference counter and a circular garbage collector . As a complement to the reference count , The garbage collector will also notice that the total amount allocated is very large ( And those not destroyed by reference counting ) The object of . under these circumstances , The interpreter will pause , Trying to clean up all unreferenced loops .
Destructor __del__ ,__del__ Called when the object is destroyed , When the object is no longer in use ,__del__ Method run
class Derived class name ( Base class name ) ...
If the construction method of the parent class is needed in the child class, it needs to display the construction method of calling the parent class , Or do not override the constructor of the parent class .
When a method of a base class is called , Need to prefix the class name of the base class , And you need to bring it self Parameter variable . The difference is that it is not necessary to bring the ordinary function into the class self Parameters .
#!/usr/bin/python class Vector: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return 'Vector (%d, %d)' % (self.a, self.b) def __add__(self,other): return Vector(self.a + other.a, self.b + other.b) v1 = Vector(2,10) v2 = Vector(5,-2) print v1 + v2
Private properties of class :__private_attrs: Start with two underscores , Declare the property private , Can't be used outside of the class or accessed directly . When used in methods within a class self.__private_attrs.
Private method of class :__private_method: Start with two underscores , Declare the method private , Cannot call... Outside of a class . Called inside a class self.__private_methods
notes :Python Instantiated classes are not allowed to access private data , But you can use object._className__attrName( Object name ._ Class name __ Private property name ) Access properties
__foo__: It's defined as a special method , Generally, the system defines the name , similar __init__() And so on. .
_foo: What begins with a single underscore is protected Variable of type , That is, the protection type can only be accessed by itself and its subclass , Cannot be used for from module import *
__foo: Double underscores indicate private types (private) The variable of , Only the class itself can be allowed to access .
Inherit object Class is a new class , No inheritance object Class is a classic class , stay Python 2.7 There will be differences between the new class and the classic class in terms of multiple inheritance :
Classic class :Python Will search the required method according to the depth first method .
The new class :Python Will search the required method according to the breadth first method .