面向对象
1.编程思维------不同程序员解决问题的思维模式
1)面向过程-----解决整个问题具体的步骤(基本语法,逻辑)
2)函数式编程----解决一个问题(函数)
3)面向对象------解决一类问题(类、对象(变量、函数))
2.类
1)定义:拥有相同功能、相同属性的对象的集合
对象就是类的实例-----就是类的一个元素
简之:类就是类别,抽象的概念
如:list是类,[10,20,30]是列表的对象
2)创建类-----用代码描述这个类是拥有那些相同功能和那些属性的对象的集合
语法:
class 类名:
类的说明文档
类的内容
说明:class----关键字 类名—自己命名 (采用驼峰式命名并且首字母大写,从第二个单词开始单词首字母大写)
类的说明文档-------多行注释
类的内容 由方法(对象方法、类方法、静态方法)和属性(对象属性、类属性)组成
方法----定义在类中的函数 属性------定义在类中的变量
如:
class Person:
"""人类""
num=61-----属性
def eat(self):-----eat----方法
print("吃饭")
3)创建对象
有类才有对象
语法:类名( )------创建指定类对象的对象,并且将对象返回
p1=Person( )
4)类中的方法
定义在类中的函数,用来描述类具备的功能,实质就是函数
方法一:对象方法
class A:
def fun1(self):
print("对象方法")
a=A()
a.fun1()#通过对象来调用
定义:直接定义在类中的函数
调用:对象.XXX( )
特点:自带一个参数self,通过对象调用方法的参数self不用传参,系统会自动将当前对象传给self(self–谁调用,就指向谁)
什么时候用:如果实现函数功能需要用到对象属性就用对象方法
方法二:类方法
class A:
@classsmethod
def fun2(cls,x,y):
print("类方法")
A.fun2(x=0,y=20)
定义:在函数前加装饰器"@classmethod"
通过:类.XXX() 的调用
特点:自带参数cls,不需要传参,系统自动将当前类传给cls。
什么时候用:如果实现函数功能不需要对象属性需要类就是用类方法
方法三:静态方法
在函数前加装饰器"@staticmethod"
class A:
@staticmethod
def fun3():
print("静态方法")
A.fun3( )
调用-----类.XXX( )
特点:没有特点
什么时候用:实现函数功能既不需要对象属性也不需要类
4.魔法方法
方法名:以’——‘开头’——'结尾的自带方法
所有的魔法方法都会在特定的情况下自动调用
常用的魔法方法:——init——方法、——repr——方法
1.——init——方法(每次创建类的对象时候会自动调用类中——init——方法)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zl9pfjec-1659611557896)(E:\BaiduSyncdisk\前锋学习\第三周\day4\图1.jpg)]
在类中添加——init——方法时,除了方法名和方法类型不能动,可以随意添加参数和随意添加函数体
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rMBiNzzO-1659611557900)(E:\BaiduSyncdisk\前锋学习\第三周\day4\图2.jpg)]
创建类的对象的时候需不需要参数,需要几个参数,由类中——init——方法决定
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMu8Fi7g-1659611557901)(E:\BaiduSyncdisk\前锋学习\第三周\day4\图3.jpg)]
2.——repr——方法(打印对象的时候会自动调用对应类中的方法,来定制打印规则(函数的返回值是什么,对象的打印结果就是什么))
返回值必须式字符串
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BRjJ52RA-1659611557902)(E:\BaiduSyncdisk\前锋学习\第三周\day4\图4.jpg)]
def __repr__(self)
return str