一、基本概念
类用来描述一组有相同特性(属性)和相同行为(方法)的对象。
属性、方法、继承、多态
二、类定义
类定义从关键字class开始。
Python中的类分为经典类和新式类,经典类可以不继承任何类,新式类必须有继承类。经典类有缺陷,因此python3不再支持经典类。
# -*- coding:utf-8 -*-
class Person(object):
counter=0
def __init__(self,age):
self.age=age
Person.counter+=1
def __del__(self):
Person.counter-=1
Person.counter
p1=Person(30)
p2=Person(32)
Person.counter
del p1
Person.counter
除了自定义的类属性,Python中的每个类都有一些特殊的属性,是由Python的对象模型所提供的。
__base__ | 该类的所有基类组成的元组 |
__dict__ | 类的属性 |
__doc__ | 类的文档字符串 |
__module__ | 类的模块名 |
__name__ | 类的名字 |
三、实例
3.1 创建实例
python中创建实例无new关键字,类的实例的使用不必先进行声明(如java中:Person per = new Person() )。
可以使用isinstance()判断一个对象是否为该类或该类型的子类。
class A(object):
pass
a=A()
a.m=1
print(a.m)
a.m='hello'
print(a.m)
和类一样,类的实例也有一些特殊的属性,它们都是由python的对象模型所提供的。
__dict__ | 实例名字空间的字典变量 |
__class__ | 生成该类的实例 |
3.2 初始化
python中有两个容易混淆的初始化函数:__init__、__new__,二者有本质不同。__new__在创建实例时调用,用于创建实例,__init__在类实例创建后调用,用于初始化实例。
3.3 __dict__属性
实例的__dict__返回实例的属性。Python属于动态语言,实例的属性与许多语言有明显的差别,可以在任何时候添加新的属性。
Python提供了一系列*attr()函数用于对对象属性进行操作,有getattr()、setattr()、delattr()、hasattr()。
3.4 特殊方法
除了__init__、__new__以及__del__的类构造、析构的相关方法,另有一些特殊方法可模拟标准类型、重载操作符等功能。
__str__与__repr__是两个常用的方法。
类的特殊方法
__new__(cls,[,...]) | |
__init__(self,args) | |
__del__(self) | |
__repr__(self) | |
__str__(self) | |
__cmp__(self,other) | |
__index__(self) | |
__lt__(self,other) | |
__le__(self,other) | |
__gt__(self,other) | |
__ge__(self,other) | |
__eq__(self,other) | |
__ne__(self,other) | |
__hash__(self) | |
__nonzero__(self) | |
__getattr__(self,name) | |
__getattribute__(self,name) | |
__setattr__(self,name,value) | |
__delattr__(self,name) | |
__call__(self,*args,**kwargs) |
四、继承
继承(Inheritance)允许子类从父类那里获得属性和方法,同时子类可以添加新方法或重载其父类中的任何方法。
五、多态
多态是指一个父类的引用变量可以指向不同的子类对象,并且在运行时根据父类引用变量所指向的实际类型执行相应的子类方法。
六、可见性
七、python类中的属性
八、抽象基类