未完待续。。。。。
(一)面向对象的基本概念
我们之前学习的编程方式就是面向过程的
面相过程和面相对象,是两种不同的编程方式
对比面向过程的特点,可以更好地了解什么是面向对象
1.1过程和函数
过程是早期的一个编程概念
过程类似于函数,只能执行,但是没有返回值
函数不仅能执行,还可以返回结果
1.2面相过程和面相对象基本概念
1)面相过程——怎么做?
1.把完成某一个需求的所有步骤从头到尾逐步实现
⒉.根据开发需求,将某些功能独立的代码封装成一个又一个函数
3.最后完成的代码,就是顺序地调用不同的函数
特点
1.注重步骤与过程,不注重职责分工
2.如果需求复杂,代码会变得很复杂
3.开发复杂项目,没有固定的套路,开发难度很大!
# 1.设计一个类(类比生活中:设计一张登记表)
class Student:
name=None # 记录学生姓名
gender=None # 记录学生性别
nationality=None # 记录学生国籍
native_place=None # 记录学生籍贯
age=None # 记录学生年龄
# 2.创建一个对象(类比生活中:打印一张登记表)
stu_1=Student()
# 3.对象属性进行赋值(类比生活中:填写表单)
stu_1.name = "林军杰"
stu_1.gender = "男"
stu_1.nationality = "中国"
stu_1.native_place = "山东省"
stu_1.age = 31
# 4.获取对象中记录的信息
print(stu_1.name )
print(stu_1.gender)
print(stu_1.nationality)
print(stu_1.native_place)
print(stu_1.age)
(二)类的成员方法
1.类的定义和使用
在上一节中,我们简单了解到可以使用类去封装属性,并基于类创建出一一个个的对象来使用。
现在我们来看看类的使用语法:
class 类名称:
类的属性
类的行为
●class是关键字, 表示要定义类了
●类的属性,即定义在类中的变量(成员变量)
● 类的行为, 即定义在类中的函数(成员方法)
创建类对象的语法对象=类名称()
类内部的函数叫(成员)方法,不叫函数。
成员方法的定义语法
# 定义一个带有成员方法的类
class Student:
name= None
def say_hi(self):
print(f"大家好啊,我是{self.name},欢迎大家多多关照")
stu1 = Student()
stu1.name="王五"
stu1.say_hi()
# 定义一个带有成员方法的类
class Student:
name= None
# def say_hi(self):
# print(f"大家好啊,我是{self.name},欢迎大家多多关照")
def say_hi(self,msg):
print(f"大家好啊,我是{self.name},{msg}")
stu1 = Student()
stu1.name="王五"
stu1.say_hi("哎哟不错哟")
(三)类和对象
基于类创建对象的语法:对象名=类名称()
为什么非要创建对象才能使用呢?
类只是一种程序内的“设计图纸”,需要基于图纸生产实体(对象),才能正常工作,面向对象编程!!!!
设计类——就是让类干活!
下面代码有声音欧 耳机党小心!!!!!
if __name__ == '__main__':
# 设计一个闹钟类
class Clock:
id = None # 序列化
price = None # 价格
def ring(self):
import winsound
winsound.Beep(2000,3000)
# 构建2个闹钟对象并让其工作
clock1 = Clock()
clock1.id = "003032"
clock1.price = 19.99
print(f"闹钟ID: {clock1.id}, 价格: {clock1.price}")
clock1.ring()
#######################################
clock2 = Clock()
clock2.id = "003033"
clock2.price = 21.99
print(f"闹钟ID: {clock2.id}, 价格: {clock2.price}")
clock2.ring()
(四)构造方法
之所以可以省略是因为方法中,self.属性名=属性名起到了给成员变量声明且赋值,写了的话那就只是赋值
"""
演示类的构造方法
"""
# 演示使用构造方法对成员变量进行赋值
# 构造方法的名称__init__
if __name__ == '__main__':
class Student:
def __init__(self, name,age, tel):
self.name = name
self.age = age
self.tel = tel
print("Student类创建了一个类对象")
stu = Student("周杰轮",31, "18500006666")
print(stu.name)
print(stu.tel)
print(stu.age)
(五)魔术方法
__ str __
if __name__ == '__main__':
class Student:
def __init__(self, name, age):
self.name = name# 学生姓名
self.age = age# 学生年龄
# __ str__魔术方法
def __str__(self):
return f"Student类对象,name:{self.name}, age:{self.age}"
stu = Student("周杰轮",31)
print(stu)
print(str(stu))
__ lt __小于比较符号方法
if __name__ == '__main__':
class Student:
def __init__(self, name, age):
self.name = name# 学生姓名
self.age = age# 学生年龄
# __ str__魔术方法
def __str__(self):
return f"Student类对象,name:{self.name}, age:{self.age}"
#__lt__魔术方法.
def __lt__(self,other):
return self.age < other.age
stu1 = Student("周杰轮",31)
stu2 = Student("周轮", 3)
print(stu1<stu2)
print(stu1>stu2)
_le_小于等于比较符号方法
if __name__ == '__main__':
class Student:
def __init__(self, name, age):
self.name = name# 学生姓名
self.age = age# 学生年龄
# __ str__魔术方法
def __str__(self):
return f"Student类对象,name:{self.name}, age:{self.age}"
#__lt__魔术方法.
def __lt__(self,other):
return self.age < other.age
#__le__魔术方法.
def __le__(self,one):
return self.age<=one.age
stu1 = Student("周杰轮",31)
stu2 = Student("周轮", 35)
print(stu1<=stu2)
print(stu1>=stu2)
_eq_,比较运算符实现方法
if __name__ == '__main__':
class Student:
def __init__(self, name, age):
self.name = name# 学生姓名
self.age = age# 学生年龄
# __ str__魔术方法
def __str__(self):
return f"Student类对象,name:{self.name}, age:{self.age}"
#__lt__魔术方法.
def __lt__(self,other):
return self.age < other.age
#__le__魔术方法.
def __le__(self,one):
return self.age<=one.age
#__eq__魔术方法.
def __eq__(self, other):
return self.age == other.age
stu1 = Student("周杰轮",31)
stu2 = Student("周轮", 31)
print(stu1==stu2)