程序设计的两种思想:面向对象和面向过程
面向过程编程的核心是过程(流水线式思维),而过程是解决问题的步骤。 面向过程的设计就像设计流水线时要考虑周全的时间处理什么样的东西。
好处是,写程序的复杂性大大降低了,只要按照执行的步骤堆栈代码就可以了。
缺点是流水线和过程被用来解决一个问题,电线一发而动全身。
应用场景:完成基本不变的场景后,有名的例子有Linux内核、git、Apache http服务器等。
面向对象编程的核心是对象(精神思维),要想理解对象是什么,就必须把自己当成上帝,在上帝眼里这个世界上存在的一切都是对象,也可以创造不存在的东西
面向对象的优缺点:
好处是解决了程序的可扩展性。 修改单个对象时,它将立即反映在整个系统中。 例如,修改游戏中一个人的人物参数的特征和技能很容易。
缺点:控制性差,无法在面向过程的编程中流水线式准确预测问题的处理流程和结果。 面向对象程序一旦启动,就会通过对象间的交互解决问题,即使是上帝也无法预测最终结果。
APP应用方案:需求经常变化的软件。 一般需求的变化集中在用户层、网络APP应用、企业内部软件、游戏等,是面向对象编程活跃的好地方
两者相辅相成,不是对立的,都是为了解决问题。
1 .类和对象类是由多个相似对象组成的集团的总称。 有助于快速理解和判断事物的性质。
类:具有相同特征的(人、狗、虎、手机)。
对象/实例:具体的某些东西(你同学诱人的草莓,楼下的热钱) )。
实例化:类——对象的过程
例如,说起手机,请想象一下他的形状。 其中有收发邮件、打电话的功能,也可以连接网络。 但是你知道我说的手机在哪个网站吗?
不,所以手机是有同样属性和方法的班级; 具体用手机做了什么,是谁的手机都是手机类的对象。
例如小米手机
Python中的所有对象、列表对象和数字对象
用变量表示特征,用函数表示技能,具有相同特征和技能的是“班”,对象是其中的具体内容。
2 .创建和创建类a )定义类语法:
类student :
传球
类配置:
类名规范:由一个或多个单词组成,每个单词的首字母大写,其余要求小写字母的Python全部面向对象,需要拓展内存空间#作者:网络老辛#开发时间: 2021/4/4/00046 scll
通过查看ID的数值,可以看到这里的类打开了内存空间。
案例1 :学生班级模板#作者:网络老辛#开发时间: 2021/4/4/00046 sclass student 3360 native _ pace='山东' #直接写在班级的变量成为属性,学生的地方实例方法:定义在类外称为函数在类内定义为方法def __init__(self,name,age ) : self.name=nameself.age=age # self.) 局部变量name是一种称为实体属性defeat(self ) : print (正在吃饭) )的方法,也称为吃饭方法,也称为动态属性)静态方法。 @statticmethod def method ) ) :打印) )因为我使用了staticmethod ) ),所以我使用了名为静态方法') @classmethod #的类方法defcm(cls 因为使用classmethod进行限定)在此情况下,您可以看到静态方法、实例方法、类方法和动态属性
b )创建目标对象也称为类的实例化
语法:实例名称=类名() )
类名括号是实例化的,它自动触发_ init _函数的执行。 可以使用它为每个实例定制自己的特性。
#作者:网络老辛#开发时间: 2021/4/4/00046 sclass student : native _ pace='山东' #直接写在类中的变量成为属性#实例方法(类中的类中定义为方法def__ )的age ) : self.name=nameself.age=age # self.name称为实体属性,进行了复制操作。 将局部变量name分配给实体的属性defeat(self ) : print (“吃饭中”)静态方法@statticmethod def method ) (: print )我将staticmethod
def cm(cls): print('我是类方法,因为我使用了classmethod进行修饰')## 创建Student的对象stu1=Student('互联网老辛',40)stu1.eat()print(stu1.name)print(stu1.age)
实例化的过程就是: 类——>对象的过程。
我们原本只有一个Student类,产生了一个stu1对象,这个对象有自己的具体命令,年龄,以及吃饭的方法。
案例2 # 作者:互联网老辛# 开发时间:2021/4/4/0004 6sclass Person: role='person' #角色的属性是人 def __init__(self,name): self.name = name #每个角色有一个自己的名字 def walk(self): print("person can walking")##实例化过程p1=Person('迷人的草莓') #类名()就相当于执行 Person.__init__()#这里你可以理解为 p1={'name':'迷人的草莓',’walk':'walk'}print(p1.name) #查看属性直接 对象名,属性名print(p1.walk()) # 调用方法, 对象名.方法名大部分的注释都写在代码里了,可以看代码去理解
再给刚才的代码增加功能,比如人不但可以走路还可以攻击狗
class Person: role='person' #角色的属性是人 def __init__(self,name,aggressivity,life_value): self.name = name #每个角色有一个自己的名字 self.aggressivity = aggressivity # 每个角色都有一个攻击力 self.life_value = life_value #每个角色都有一个生命值 def walk(self): print("person can walking") def attack(self,dog): dog.life_value -= self.aggressivity##实例化过程p1=Person('迷人的草莓',10,1000) #类名()就相当于执行 Person.__init__()#这里你可以理解为 p1={'name':'迷人的草莓',’walk':'walk'}print(p1.name) #查看属性直接 对象名,属性名print(p1.walk()) # 调用方法, 对象名.方法名print(p1.aggressivity)print(p1.life_value) c) 类属性,类方法,静态方法 类属性: 类中方法外的变量称为类属性,该类被所有对象共享类方法: 使用@classmethod修饰方法,使用类名直接访问静态方法 使用@staticmethod修饰的方法,使用类名直接访问的方法Print(Student.native_place) 访问类属性
student.cm 调用类方法
student.sm 调用静态方法