
个人主页:天寒雨落的博客_CSDN博客-初学者入门C语言,python,数据库领域博主
💬 热门专栏:python_天寒雨落的博客-CSDN博客
每日赠语:没有窘迫的失败,就不会有自豪的成功;失败不可怕,只要能从失败中站起来。
目录
类是一个模板,将多个对象的类似属性放在一个模板中,这就是封装。避免了外部对内部数据的影响,提高了程序的维护性。
继承是用来实现代码复用和设计复用的机制,是面向对象程序设计的重要特性之一。设计一个新类时,如果可以继承一个已有的设计良好的类然后进行二次开发,会大幅减少开发工作量。
一般是指父类的一个方法在不同派生类对象中具有不同表现和行为。派生类在继承了父类的行为和属性之后,还可能增加某些特定的行为和属性,也可能会对继承父类的行为进行一定的改变,这些都是多态的表现形式。
使用class关键字来声明一个类,基本格式如下:
class 类名:
"类体说明" #类的功能等进行说明
类成员
方法成员
类是由3部分组成的:
类的名称:用关键字class声明类,类名首字母一般大写,比如Dog。
类的数据属性:用来存储特征的值(体现对象的特征),简称为成员。如:名字、年龄。
类的方法属性:用来对成员进行操作(体现对象的行为),简称为方法。如:学习、睡觉。
类体说明:对类的功能等进行说明。
使用类中定义的成员和方法,必须对类实例化,即创建类的对象,根据类创建实例对象的语法格式如下:
实例名(对象名) = 类名([参数列表] )
访问实例成员,可以通过如下方式:
实例名 .成员 、 实例名 .方法() ,其中“.”叫做成员运算符。
要想给实例添加成员,可以通过如下方式:
实例名.新的成员名 = 值
代码
- #定义类.
- class Car:
- #定义构造方法.
- def __init__(self,name):
- self.name = name
- #定义方法.
- def getName(self):
- return self.name
- #创建对象.
- c1 = Car("迈巴赫")
- print("这辆汽车的名字:",c1.getName())
执行结果
用来存储特征值(体现实例对象的特征)。
用来对数据成员进行操作(体现实例对象的行为)。
按照归属于类还是实例对象,类的数据成员可分为两种:
1.类成员
2.实例成员
按照能否在类的外面直接访问,类的成员可分为两种:
1.公有成员
2.私有成员
3.内置成员
所有的类(无论是系统内置的类还是自定义类)都有一组特殊的成员,其前后各有两个下划线类似:"__xxx__",常见的内置成员如下:
注意事项
1.当用对象名调用类成员时, “对象.类成员”只是“类.类成员”的一份拷贝。当修改“对象.类成员”时, “类.类成员”的值不变。
2.当类成员和实例成员同名时:在类的方法内和类的外面,“类名.类成员”调用的是类成员;在类的方法中“self.实例成员” 或在类的外面“对象名.实例成员” 调用的是实例成员。(在类的方法内,和实例成员同名的类成员被屏蔽)
3.定义在类的方法中且不以self为前缀的变量是该方法的局部变量,不能在方法外使用,也不能在类的外面调用。
类的方法大致可分为如下四种类型:
一种特殊形式的方法,结合了成员和方法的各自优点,既可以通过属性访问类中的成员,也可以在访问前对用户为成员提供数据的合法性进行检测,还可以设置成员的访问机制。属性通常包括get()方法和set()方法。前者用于获取成员的值,后者用于设置成员的值。
类有大量的特殊方法,其中比较常见的是构造方法__init__()和析构方法__del__()
构造方法__init__()
当创建类的实例的时候,系统会自动调用构造方法,用来为类中的成员设置初始值或进行必要的初始化工作,在类实例化时被自动调用和执行。
析构方法__del__()
当删除一个实例对象来释放其所占用资源的时候,Python解释器默认会调用__del__( )方法。
1.构造方法和析构方法都可以由用户自己定义,如果用户没定义,系统会提供默认的构造方法和析构方法。
2.默认的析构方法__del__( )会进行必要的清理工作。
创建派生类的一般格式:
class 派生类名字(父类1,父类2, ...):
类体
代码
- #定义People类.
- class People:
- #定义构造方法.
- def __init__(self,n,a):
- self.name = n
- self.age = a
- #定义公有方法.
- def speak(self):
- print("我是%s,今年%d岁." % (self.name,self.age))
- #定义Student类,继承类People.
- class Student(People):
- def __init__(self,n,a,g):
- People.__init__(self,n,a) #调用父类的构造方法.
- self.grade = g
- #重写父类的方法.
- def speak(self):
- print("我是%s,今年%d岁,读%d年级." % (self.name,self.age,self.grade))
- if __name__ == '__main__':
- #创建Student类的对象.
- s = Student('孔融',10,4)
- s.speak() #调用Student类中的speak()方法.
- super(Student,s).speak() #调用父类People的speak()方法.
运行结果

- 派生类可以只继承一个父类(单继承)
- 派生类也可以继承多个父类(多继承)
- 派生类调用父类方法,可用super.方法名()或父类名.方法名()
- 派生类可以继承父类的成员和方法,也可以定义自己的成员和方法。
- 如果父类方法不能满足要求,派生类也可以重写父类的方法。
一般是指父类的一个方法在不同派生类对象中具有不同表现和行为。
代码
- #定义类Animal.
- class Animal():
- #定义方法.
- def getInfo(self):
- return "I am an animal."
- #定义类Lion,继承类Animal.
- class Lion(Animal):
- #重写父类Animal的方法getInfo().
- def getInfo(self):
- return "I am a lion."
- #定义类Tiger,继承类Animal.
- class Tiger(Animal):
- #重写父类Animal的方法getInfo().
- def getInfo(self):
- return "I am a tiger."
- #定义类Leopard,继承类Animal.
- class Leopard(Animal):
- #重写父类Animal的方法getInfo().
- def getInfo(self):
- return "I am a leopard."
- if __name__ == '__main__':
- #创建各个类的对象列表objectList.
- objectList = [item() for item in (Animal,Lion,Tiger,Leopard)]
- #不同对象调用同一方法getInfo().
- for object in objectList:
- print(object.getInfo())
执行结果

Python中一般使用抽象基类(Abstract Base Class,ABC)来实现抽象类。
抽象类中通常包含抽象方法(没有实现功能),该类不能被实例化,只能被继承,且派生类必须实现抽象类中的抽象方法。
代码
- import abc
- #定义抽象类.
- class People(metaclass=abc.ABCMeta):
- #定义抽象方法.
- @abc.abstractmethod
- def working(self):
- pass
- #定义抽象类People的派生类.
- class Chinese(People):
- #实现抽象类的抽象方法working().
- def working(self):
- print("学习汉语…")
- #创建Chinese类的对象.
- c1 = Chinese()
- c1.working()
执行结果

👍+✏️+⭐️是对博主最大的鼓励与支持!!!