Python中的类基本概念

一、面向过程和面向对象

面向过程和面向对象是两种编程风格

面向过程,即怎么去实现,主要考虑功能实现的步骤和过程,多使用函数组合相互调用实现

面向对象,即谁去实现,怎么配合,主要考虑动作的主体之间的相互关系,面向对象将不同的操作按主体进行划分,然后指挥不同的对象组合完成不同的操作

二、面向对象基本概念

1、类:用来描述具有相同属性和方法的对象的集合,类定义了该集合中每个对象所共有的属性和方法,对象是类的实例

2、数据变量:类变量或实例变量,用来处理类及实例对象相关的数据

      类变量:类变量在所有实例对象中是公用的,类变量定义在类中且在函数体之外,类变量通常不作为实例变量使用

      实例变量:在类的声明中,属性是用变量来表示的,这种变量称为实例变量,实例变量定义在类中且在其他成员方法之外

      局部变量:定义在方法中的变量,只作用于当前的实例

3、方法:类中定义的函数

4、继承:一个派生类继承基类的字段和方法,继承也允许把一个派生类作为一个基类对象看待

5、重写:如果从父类继承的方法不能子类的需求,可以对其进行改写,这种过程叫方法的覆盖,也叫方法的重写(override)

6、实例化:创建一个类的实例,即类的具体对象

7、对象:通过类定义的数据结构实例,对象包括两个数据成员(类变量和实例变量)和方法

三、类的使用

1、创建类

使用class语句创建类

class ClassName:
    '类的帮助信息'  #类文档,可以通过ClassName.__doc__查看
    class_suite  #类的实体

实例

# -*- coding: UTF-8 -*-

class Employee:
    '所有员工的基类'
    empCount = 0  #类变量,在类的所有实例对象中共享,可以在内部类或外部类中使用Employee.empCount来访问

    def __init__(self, name, salary):  #__init__类的构造函数或实例化方法,创建类的实例会调用该方法
        self.name = name
        self.salary = salary
        Employee.empCount += 1

    def displayCount(self):  #类方法,与普通函数不一样,必须有额外的第一个参数名称self,self代表类的实例,而非类
        print("Total Employee %d" % Employee.empCount)

    def displayEmployee(self):
        print("Name : ", self.name, ", Salary: ", self.salary)


"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print("Total Employee %d" % Employee.empCount)
print(Employee.__doc__)

2、创建实例对象

Python中没有关键字new,类的实例化类似于函数调用,使用类的名称来实例化,通过__init__接收参数

3、访问属性

使用点号.来访问对象的属性

4、销毁对象

析构函数__del__在对象销毁时候使用,当对象不再被使用时,__del__方法运行

四、Python内置类属性

__dict__:类的属性(包含一个字典,由类的数据属性构成)

__doc__:类的文档字符串

__name__:类名

__module__:类定义所在的模块

__bases__:类的所有父类构成的元素(包含了一个由所有父类构成的元组)

五、Python对象销毁机制

Python使用了引用计数来跟踪和回收垃圾

在Python内部记录着所有使用中的对象各有多少引用,一个内部跟踪变量,称为引用计数器

当一个对象被创建时,就创建了一个引用计数器,当对象不再需要时,这个对象的引用计数变为0,解释器会在适当的时机,将垃圾对象占用的内存空间进行回收

六、类的继承

通过继承创建的类称为派生类或子类,被继承的类称为基类或父类

继承类

class 派生类名(基类名):
    ...

多重继承

class 派生类名(基类名1,基类名2,基类名3,...):
    ...

Python中继承的特点

1、如果子类需要父类的构造方法,就要显式的调用父类的构造方法,或者不重写父类的构造方法

2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量

3、Python查找对应类型的方法时,先在本类中查找调用的方法,查不到时,再去基类中逐个查找

七、类属性与方法

1、类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问,在类内部的方法使用self.__private_attrs访问

2、类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部被调用,在类内部使用self.__private_method访问

3、类方法

在类的内部,使用def关键字为类定义一个方法,类方法必须包含参数self,且为第一个参数

4、单下划线开头

以单下划线开头表示是protected类型的变量,即保护类型变量只允许本身和子类访问,不能用于from module import

5、双下划线开头

以双下划线开头表示是private类型的变量,即私有类型变量只允许这个类本身进行访问

6、双下划线开头和结尾

一般是系统定义的名字,例如__init__

八、类属性和实例属性

实例属性属于各个实例所有,互不干扰

类属性属于类所有,所有实例共享一个属性

当实例属性和类属性名称相同时,访问实例属性会访问到实例属性值,当删除实例属性值时,再访问会访问到类属性,所以不要对实例属性和类属性使用相同的名字

原文地址:https://www.cnblogs.com/testerlina/p/14968663.html