14 ————面向对象基础
一、编程思想
编程思想:程序员面对问题解决问题的思维方式
- 面向过程编程(穷人思想) - 掌握语法、逻辑
- 函数式编程(小资思想) - 掌握函数(遇到问题先想一想有没有一个已经存在的函数具备解决问题的能力,如果有,直接调用,如果没有,就创建一个函数)
- 面向对象编程(富豪思想) - 类、对象(变量、函数)
二、认识类和对象
1. 什么是类?什么是对象?
类就是拥有相同功能和相同属性的对象集合 - 抽象的概念
对象就是类的实例(类具体的表现)
举例:生活中和程序中
- 人是类,某一个确定的人就是它的一个对象。桌子是类,那我的书桌就是桌子得一个对象。车是类,那我的自信车就是车的一个对象。
- list是个类,那么具体的[19,29,30,45,56]就是它的一个类。
2. 定义类
类就是类型、类别。
类的分类:一种是系统创建的类,一种是自己创建的类。
1)定义类(创建类)
- 用代码描述清楚这个类是拥有哪些相同功能和哪些相同属性的对象的集合
- 功能:函数
- 属性:保存数据的变量
2)语法:
class 类名:
类的说明文档
类的内容
说明:
1)class - 关键字:固定写法
2)类名 - 程序员自己命名,2个要求,是标识符,不是关键字,3个要求:见名知意,采用驼峰式命名并且首字母大写。(类名大写开头;驼峰式指的是从第二个单词开始单词首字母大写).
3): - 固定写法
4)类的说明文档 - 多行注释
5)类的内容 - 相同功能和相同属性。
由方法(对象方法、类方法、静态方法)和属性(对象属性、类属性)组成.
方法 ------- 定义在类中的函数.
属性 ------- 定义在类中的变量
class Person:
"""人类"""
num=61 #num是属性
def eat(self): #eat是方法
print('吃饭')
def sleep(self):
print('睡')
- 即类的内容就是有方法和属性,方法就是函数,属性就是变量.
3. 创建对象
-
语法:类名() - 创建指定类对应的一个对象,并且将对象返回
-
举例
p1=Person() p2=Person() print(p1) #<__main__.Person object at 0x0000025184694B20> print(p2) #<__main__.Person object at 0x0000025184237730> #if __name__=='__main__'#表示运行当前文件
三、类中的方法
1. 方法 :定义在类中的函数,用来描述具备的功能
2. 类的分类
类中的方法有三种:对象方法、类方法、静方法
1)对象方法
- 怎么定义? 将函数定义在类中
- 怎么调用?通过对象来调用 — 对象. xxx ( )
- 特点:自带参数self,通过对象调用对象方法的时候,参数self不需要传参,系统会将当前对象传给self(self,谁调用,就指向谁)。
- 什么时候用:如果实现函数的功能需要用到对象属性就使用对象方法
2)类方法
-
怎么定义? 定义函数前加装饰器’@classmethod’
-
怎么调用?通过类来调用 - 类名.xxx()
-
特点:自带参数cls,调用的时候,不需要传参,系统将当前类传给cls.
-
什么时候用:如果实现函数的功能不需要用到对象属性就使用类方法
3)静态方法
-
怎么定义? 定义函数前加装饰器’@staticmethod’
-
怎么调用:通过类来调用 - 类名.xxx()
-
特点:没有特点
-
什么时候用:如果实现函数的功能即不需要用到对象属性,也不需要类,就使用。
注意:可以在self、cls后面增加参数,看需求增加。再调用的时候,要给增加的参数传参,可以用用位置参数,也可以用关键字参数传参,self,cls不需要传参
class A: def func1(self): print(f'self:{ self}') print('对象方法') def func11(self, x, y): print('对象方法2') @classmethod def func2(cls): print('类方法') @staticmethod def func3(): print('静态方法') a = A() b = A() print(f'a:{ a}') # 通过对象调用对象方法 a.func1() b.func11(200, 200) a.func11(x=100, y=200) # 通过类调用类方法 A.func2() # 通过类调用静态方法 A.func3()
四、初始化方法
1. 魔法方法
方法名以__ 开头并且以 __结尾的自带的方法,就是魔法。
所有的魔法方法都会特定的情况下被自动调用。
2. 常用的魔法方法 ------__ init __ 与 __ repr __方法
1)__ repr __
-
打印对象的时候会自动调用对象对应的类中的__repr__方法,来定制打印规则。
-
函数的返回值是什么,对象打印结果就是什么。返回值必须是字符串!
class A: def __repr__(self): return 'abd' pass a1=A() print(f'a1:{ a1}') #a1:abd a2=A() print(f'a2:{ a2}') #a2:abd
2)__ init __
-
每次创建类的对象的时候会自动调用类中的__init__方法.
class B: def __init__(self): print('init方法') #现在打印不会调用方法 pass b1=B() ##创建类的对象的时候,方法就会调用 b2=B() ##创建对象,调用几次,就会打印几次 print(b1) print(b2) class C: #在类中添加__init__方法的时候,除了方法和方法类型不能动,可以随意添加参数和随意添加函数体 def __init__(self,x,y): print('C的init方法',x,y)
-
创建类的对象的时候需不需要参数,需要及格参数,由类中__init__方法决定。
c1=C(10,20