面向过程和面向对象
面向过程通常是把完成某一个需求的所有步骤从头到尾逐步实现,根据开发的需求,将某些功能独立的代码封装成一个又一个的函数,最后顺序调用不同的函数。它注重步骤和过程,不注重职责和分工。面向过程不适合复杂项目的开发。
面向对象是一种抽象化的编程思想。它其实就是一个大型的封装,根据职责在一个对象中封装多个方法。
面向对象在完成某一个需求之前,首先要确定它要做的事情,也就是它的职责,然后根据职责确定不同的对象,在对象内部封装多个不同的方法,最后就是顺序的让不同的对象调用不同的方法。
面向对象更加注重对象和职责,不同的对象承担不同的职责。
比如说:吃饭
思考:几种方式可以吃到饭?
答:自己做饭和点外卖。
做饭:买菜 —> 洗米 —> 煮饭 —> 洗菜 —> 切菜 —> 炒菜 —> 吃饭
点外卖:打开外卖软件 —> 选择要吃的饭 —> 下单,等待骑手送达 —> 吃到饭了。
对比这两种方式,可以发现点外卖可以更容易吃到饭,我们只需要打开外卖软件下单就好了,不需要去关心怎样做饭的。
类和对象
Python 是面向对象的语言,在 python 中一切皆对象。
类是多个具有相同特征和行为的事物的统称。这些事物的特征被称为属性,行为被称为方法。
类就相当于制造飞机的图纸,是一个模板,负责创建对象的。
简单来说,类就是变量和函数的集合。这些变量函数需要具有相似性质的。
对象就是由类创建出来的一个具体的存在,可以直接使用。对象拥有对应类的所有属性和方法。它就相当于用图纸制造的飞机。
类和对象的关系
对象是根据类创建出来的,所以应该先有类,后有对象。
对象拥有类中定义的所有属性和方法,不能多也不能少。
类只有一个,而对象可以有多个,不同的对象之间,它的属性可能会各不相同。
类的创建
使用 class 关键字去创建类。在创建类之前,我们应该先分析需求,看需要哪些类,类中有什么属性和方法。
类的三要素:类名(这类事物的名字,采用大驼峰命名法)、属性(这类事物所拥有的特征)、方法(这类事物所拥有的行为,通常是个动词)。
语法:
class Student: # 类名首字母大写
# 类属性:创建出的类具有哪些特征(被所有对象共享)
name = '张三'
age = 21
iphone = '13672829899'
# 方法:创建出的类有哪些行为
def display(self): # 通过 self.属性名 在类中访问对象属性
print(f'我的名字叫{self.name},今年{self.age}岁,我的电话是{self.iphone}')
def eat(self):
print('我爱吃东西')
Student 是类名,类名可以是一个或者多个单词组成,每个单词首字母大写,单词之间不需要下划线(大驼峰命名法,例如:StuInfo)。类名后面可以跟括号(括号里面写继承的父类),也可以不跟。
如果没想好类里面怎么写,可以使用 pass 语句避免错误。
类的实例化(创建对象)(对象=属性+方法)
类定义完成后,就可以创建对象了。
创建类的对象又称为实例化类。在使用 类名() 创建对象时,python 解释器自动在内存中为对象分配内存,同时调用初始化方法 __init__() 为对象初始化。有了实例,我们就可以调用类中的属性(类中的所有变量,调用格式:对象名.变量)和方法(类中的所有函数,调用格式:对象名.函数())了。
在 Python 中创建类的对象不需要使用 new 关键字(Python 中没有 new),类似于函数调用方式。
1)语法格式
对象名 = 类名([参数列表])
对象名(变量)中记录的是对象的内存地址,通过 对象名. 来访问对象属性和方法。
参数列表中是否有参数,有几个参数,取决于初始化方法 __init__() 有几个参数(除了 self 参数),是位置参数还是默认值参数。
2)代码演示
创建 Student 类的实例对象:
class Student: # 类名首字母大写
# 类属性:创建出的类具有哪些特征(被所有对象共享)
name = '张三'
age = 21
iphone = '13672829899'
# 方法:创建出的类有哪些行为
def display(self): # 通过 self.属性名 在类中访问对象属性
print(f'我的名字叫{self.name},今年{self.age}岁,我的电话是{self.iphone}')
def eat(self):
print('我爱吃东西')
stu = Student() # stu变量中记录的是对象在内存中的地址,也就是说 stu 引用了新建的 Student 对象。
# stu变量中存储的是对象的内存地址。
# 根据输出结果可以看出这个变量所引用的对象是由Student创建的,在内存中的地址是0x0000022840FAF400
print(stu) # <__main__.Student object at 0x0000022840FAF400>
# 访问类属性
print(stu.iphone)
# 调用方法
stu.display()
输出结果:
注意:在计算机中,通常使用十六进制表示内存地址。(%d 输出十进制数字,%x 输出十六进制数字)
在类里面获取对象属性:self.属性名
在类外面获取对象属性:对象名.属性名
注意:
创建出来的对象也叫类的实例。
创建对象这个动作称为类的实例化。
对象的属性也叫实例属性。
对象调用的方法叫做实例方法。
一个类可以创建多个对象,每个对象都各自拥有自己的实例属性,通过 self. 来访问自己的属性和调用自己的方法。
self参数
self 是对类的当前实例的引用,用于访问该类中的变量。简单来说就是哪一个对象调用的方法,方法的第一个参数 self 就是哪一个对象的引用。
它可以不叫 self,可以叫其他的名字,但是
在方法的内部可以通过 self.属性名 访问对象的属性,还可以通过 self.方法名 调用其他的对象方法。
# Python解释器遇到类并不立即执行,只是知道这里定义了一个Person类
class Person:
def __init__(self,name):
self.name = name
def play(self):
# 哪一个对象调用的方法,self就是哪一个对象的引用
print(self)
print('%s在打球。' % self.name)
# 创建一个Person对象,让变量per对这个对象进行了一个引用
per = Person('Alice')
print(per)
# per.name = 'Alice' # 给per对象增加了一个属性name,其中存储的字符串是'Alice'
per.play() # per对象调用play方法,这时将per对象传入play方法中的self参数
# 创建第二个Person对象赋给变量per1
per1 = Person('Tom')
print(per1)
# per1.name = 'Tom'
per1.play()
通过断点调试可以清晰的看到这个过程。
查看对象的所有属性和方法 — dir
在 Python 中一切皆对象,我们可以通过内置函数 dir() 来获取对象的所有属性和方法。
其中以双下划线开头和结尾(__方法名__)的格式的方法是 Python 提供的内置属性和方法。
>>> class Student:
... pass
...
>>> dir(Student)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>>
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
暂无评论内容