一、基础
1、理解面向对象
(1)概念
面向对象是一种编程思想,将程序中的数据和操作封装成对象,通过对象之间的交互实现功能。它包括类、对象、封装、继承和多态等要素。面向对象编程提高了代码的可维护性、重用性和扩展性,使代码更模块化和易于理解。
(2)面向对象和面向过程的区别
①面向过程强调的是功能行为,以函数为最小单位,考虑怎么做。
②面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
2、类和对象:类负责创建对象
class 类名:
pass
3、理解类和对象
(1)类:是一系列具有相同特征和行为事物的统称,是一个抽象的概念,不真实存在。
①特征即是属性;
②行为即是方法。
(2)对象:是类创建出来的真实存在的事物。
4、面向对象的简单实现
(1)过程
class My_example(object):
print("Hello,world!")
if __name__ == '__main__':
demo = My_example()
(2)结果
Hello,world!
5、创建对象
(1)示例
class My_class:
def Chinese_class(self):
print("语文")
def English_class(self):
print("英语")
lesson = My_class()
print(lesson)
lesson.English_class()
<__main__.My_class object at 0x000001F6FFFB7FA0> # 打印的地址
英语
• self
类的方法与普通函数只有一个特别的区别——他们必须有一个额外的第一个参数名称,按照惯例它的名称是self。
6、添加和获取对象属性
• 对象即是特征,对象属性可以在类外面添加和获取,也可以在类内部添加和获取。
(1)__init__方法:初始化对象
①init() ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤
②init(self) 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去。
③例:
class My_class:
def __init__(self):
self.time1 = "第一节课"
def Chinese_class(self):
print(f"{self.time1}语文")
def English_class(self):
print("英语")
lesson = My_class()
print(lesson)
lesson.Chinese_class()
lesson.English_class()
<__main__.My_class object at 0x000002A1BA297E80>
第一节课语文
英语
④带参数的init
# -*- coding:utf-8 -*-
class My_class:
def __init__(self, time1, time2):
self.time1 = time1
self.time2 = time2
def Chinese_class(self):
print(f"{self.time1}语文")
def English_class(self):
print(f"{self.time2}英语")
lesson = My_class("第一节课", "第二节课")
print(lesson)
lesson.Chinese_class()
lesson.English_class()
<__main__.My_class object at 0x00000163FB1B7FD0>
第一节课语文
第二节课英语
(2)str()方法
当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了str 方法,那么就会打印从这个方法中return的数据。
class My_class:
def __init__(self, time1, time2):
self.time1 = time1
self.time2 = time2
def __str__(self):
return f"{self.time1}语文,{self.time2}英语"
lesson = My_class("第一节课", "第二节课")
print(lesson)
第一节课语文,第二节课英语
(3)其他方法(篇幅有限下面是介绍常见魔术方法的文章)
python高级知识之常用的魔术方法_python魔术方法_克里斯蒂亚诺·罗纳尔达的博客-CSDN博客
7、类的属性
• 类的属性分为公开属性和私有属性
class computer:
__num1 = 1
num2 = 2
num4 = __num3 = 0
def count(self):
__num3 = self.__num1 + self.num2
num4 = self.__num1 - self.num2
a = computer()
print(a.num4)
try:
print(a.__num3)
except AttributeError:
print("私有变量,不能使用")
0
私有变量,不能使用
二、进阶
1、继承:在python中一个类可以集成于另一个类也可以继承多个类,被继承的类叫父类(或者叫基类,base class)
①单继承:使用方法调用父类中的方法。
class ability(object):
def __init__(self):
self.teacher = "python,爬虫,JS"
def study(self):
print(f"老师的技能有:{self.teacher}")
class Apprentice(ability): # 子类继承父类
pass
func = Apprentice()
print(func.teacher)
func.study()
python,爬虫,JS
老师的技能有:python,爬虫,JS
②多继承:多继承是根据类的顺序进行调用的。
class ability1(object):
def __init__(self):
self.teacher1 = "python,爬虫,JS"
def study1(self):
print(f"老师1的技能有:{self.teacher1}")
class ability2(object): # 子类继承父类
def __init__(self):
self.teacher2 = "web,机器学习,深度学习"
def study2(self):
print(f"老师2的技能有:{self.teacher2}")
class Apprentice(ability1, ability2):
def __init__(self):
ability1.__init__(self)
ability2.__init__(self)
func = Apprentice()
print(func.teacher1)
print(func.teacher2)
python,爬虫,JS
web,机器学习,深度学习
③超继承:改写父类里面的方法,同时还要保留父类里面的方法。
class ability1(object):
def __init__(self):
self.teacher1 = "python,爬虫,JS"
def study1(self):
print(f"老师1的技能有:{self.teacher1}")
class ability2(object): # 子类继承父类
def __init__(self):
self.teacher2 = "web,机器学习,深度学习"
def study2(self):
print(f"老师2的技能有:{self.teacher2}")
class Apprentice(ability1, ability2):
def __init__(self):
ability1.__init__(self)
ability2.__init__(self)
self.teacher1 = "C#"
self.teacher2 = "上位机"
def student(self):
print(f"学生又学会了{self.teacher2}、{self.teacher1}")
a = ability1()
a.study1()
b = ability2()
b.study2()
# 修改从父类继承的方法但不影响原来父类的里的方法,依旧可以正常使用
func = Apprentice()
func.student()
老师1的技能有:python,爬虫,JS
老师2的技能有:web,机器学习,深度学习
学生又学会了上位机、C#
2、多态:指的是一类事物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的子类对象调用相同的方法,产生不同的执行结果,多态可以增加代码的灵活度。
class Games:
name = "运动会"
print("100,400,1000,铅球,跳远")
print("可将项目分为两类:")
class TianJing(Games):
print("田径")
class QiTa(Games):
print("其他")
games = Games()
tianjing = TianJing()
qita = QiTa()
100,400,1000,铅球,跳远
可将项目分为两类:
田径
其他