目录
面向对象
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。
面向对象:
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
- 方法:类中定义的函数。
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
- 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 实例变量:定义在方法中的变量,只作用于当前实例的类。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
- 实例化:创建一个类的实例,类的具体对象。
- 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
类的定义
class Student(object): //object是继承的父类,如果没有可不写,object是所有类的父类
'''类的注释,可以通过属性 __doc__ 获取其值'''
name='xie' // 公有属性
_age=20 // 私有属性,只有类内部才能访问
__author__='xiaoxie' // 特殊属性 __author__
def __init__(self): // 类的构造函数,第一个参数永远是self,表示创建的实例本身
pass
def Test(): // 类的公有方法
return("类的公有方法")
def _Test2(): // 类的私有方法
return("类的私有方法,外部不能访问")
类的访问
类的访问有两种:属性引用和类的实例化
属性引用
>>print(Student.name)
xie
类的实例化
>>stu=Student()
>>print(stu.name)
xie
类的属性和方法
公有属性:name
私有属性:_age
内置特殊属性:
__doc__ 就是类里面通过 ''' ''' 的注释内容
__name__ 就是类的名字
__author__ 也就是类的作者
公有方法:Test()
私有方法:Test2()
类方法: 被classmethod()函数处理过的函数,能被类所调用,也能被对象所调用(是继承的关系),第一个参数不是self而是cls(当前的类)
静态方法: 相当于全局函数,可以被类直接调用,可以被所有实例化对象共享,通过staticmethod()定义,静态方法没有 self 参数
构造方法:
用于初始化类的内部状态,Python提供的构造函数是__init__();
__init__()方法是可选的,如果不提供,Python会给出一个默认的的init方法
析构方法:
用于释放对象占用的资源,Python提供的析构函数是del();
del()也是可选的,如果不提供,则Python会在后台提供默认析构函数
继承和多态
当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)
class Father:
money=100
__money=1000 //父类的私有属性不能被继承
def run(self):
print("这是父类的方法")
class Mother:
money=500 //父亲有这个属性,所以只继承父亲的属性
height=170
def run(self):
print("这是母亲的方法")
class Son(Father,Mother): //同时继承父亲和母亲,多重继承
def run(self):
print("这是儿子的方法") //重载父类的方法
Father.run(self) //也可以调用父类的方法
jerry=Son()
print(jerry.money,jerry.height)
jerry.run()
// 100 170
// 这是儿子的方法
// 这是父类的方法