面向过程和面向对象
面向过程:代码顺序执行、模块之前尽可能的独立
面向对象:根据不同的需求执行代码
注意:面向对象只是一种思想,并不是一门编程语言
类的定义
1.类是什么?
类是自定义的数据类型,然后这个数据类型的变量就叫做对象
2.类有什么用?
类可以把现实世界的物和事抽象为代码,然后通过代码解决现实问题或需求
3.怎么抽象?
任何事务都有自身的属性(变量)和方法(函数),
4.类的定义
格式:
class Maker():
name='小明'#成员属性,成员变量
def add(self,a,b):#成员方法,成员函数
return a+b
说明:
1.python使用class来定义类
2.类名只要符合标识符的规则就可以,一般使用大小驼峰法取名字
3.类的内容是就是属性(对类的特征的描述)和方法(对类的行为的描述)
4.类名一般首字母为大写,对象一般首字母为小写
注意:
1.类中的成员方法区别于普通方法:参数部分一定包含self,而且最好self出现在参数列表的第一个
2.调用函数的时候,self不需要被传参
#案例:抽象一个汽车,写成类
class Car():
#属性
name='BMW'
color='白色'
#方法
def func(self):
print("代步")
def func2(self):
print("运输货物")
#案例:把电脑抽象出来,写成一个类
class Pc():
name='苹果'
color='银色'
cpu='i7'
def __init__(self):
print("Pc的init函数")
def func(self):
print("编程")
def func2(self):
print("看电影")
def func3(self):
print("玩游戏")
p1=Pc()
p1.func3()
1.对象的创建
1.格式:对象=类名()
2.类在本文件定义,对象也在本文件创建
3.类在别的文件定义,对象在本文件创建
4.__init__(self):#当对象创建时,会调用该函数
2.调用属性
对象名.属性名
1.声明在类中的变量叫类属性,所有的对象都可以使用
2.定义对象属性:对象.类中没有的属性名=值
3.对象属性的特点是该属性只有该对象可以使用
#案例:定义一个学生类,类属性有name,age,然后通过对象修改类属性的值,然后给对象添加属性score,并打印
class Student():
name='小明'
age=18
#创建对象
s=Student()
print(s.name,s.age)
s.name="小花"
s.age=28
print(s.name,s.age)
#给对象添加属性
s.score=88
print(s.score)
3.调用方法
对象名.方法名()
所有的成员方法(成员函数)都有一个self参数,该参数在调用函数时,不需要传递实参
案例:定义一个学生类。有下面的
属性:1 姓名,2 年龄,3 成绩(语文,数学,英语)[每课成绩的类型为整数]
类方法:1 获取学生的姓名:get_name() 返回类型:str;2 获取学生的年龄:get_age() 返回类型:int;3 返回3门科目中最高分数的课程。get_course();4 返回该学生的平均成绩get_avg()
class Student2():
name='小王'
age=12
y=90
s=100
e=88
def get_name(self):
return self.name
def get_age(self):
return self.age
def get_course(self):
return max(self.y,self.s,self.e)
def get_avg(self):
return (self.y+self.s+self.e)/3
ss=Student2()
name=ss.get_name()
print(name)
print(ss.get_age())
print(ss.get_course())
print(ss.get_avg())
注意:如果要在类中的成员函数里使用类属性,那么使用时,要在类属性前面加上self.类属性
名称说明:
类中定义的变量:类属性,类变量
对象自身定义的变量:对象属性,实例属性,实例变量
成员变量包含类变量和实例变量
全局变量和局部变量是相对于作用域来说的.
self介绍
1.self是对象自己,哪个对象调用成员函数,那么成员函数的self就是哪个对象
class Maker():
def test(self):
print("test")
m=Maker()
m.test()#解析器会把m传递到test中 ---->test(m)
m2=Maker()
m2.test()
2.这个传递动作不是程序员完成的,是解析器完成的
3.self的作用:
1.可以使用self.在成员函数中访问类变量
2.可以区分局部变量和类变量
3.可以在成员函数内定义对象属性
4.可以通过成员函数返回对象本身
#案例:有对象属性(姓名,年龄,分数),设计一个类,类中有修改对象属性值的方法,打印对象属性的方法
#其中分数属性在修改函数内定义,修改年龄时要判断是否合法,如果不合法打印不合法
class Student():
def printName(self):
print(self.name)
def printAge(self):
print(self.age)
def printScore(self):
print(self.score)
def setScore(self,mys):
#定义了对象属性,并赋值
self.score=mys
def setName(self,myname):
self.name=myname
def setAge(self,myage):
if myage>0 and myage<=140:
self.age=myage
else:
print("输入的年龄不合法")
s=Student()
#定义对象属性
s.name="小明"
s.age=18
s.setScore(100)
s.setName('小花')
s.setAge(-20)
s.printAge()
s.printName()
s.printScore()
构造函数
1.构造函数是给对象的实例变量赋初始值
2.当一个对象被创建的时候,第一个被自动调用的函数
3.语法:
__init__(参数列表):
函数体
4.构造函数的参数在定义对象时传递,如:m=Maker(实参) ->实参传递到__init__(形参)
5.如果没有显示定义构造函数,那么系统默认提供一个无参的构造函数,这个无参的构造函数是空函数体
手动添加了有参的构造函数之后,系统将不再提供无参的构造函数
6.m=Maker()#调用无参构造;m=Maker(10)#调用有参构造函数
析构函数
1.当删除一个对象时,python解释器也会调用一个函数,做清理工作,这个函数就叫析构函数
2.格式:
__del__(self):
3.time模块中的sleep(时间)可以暂停代码运行
4.删除对象用del,格式:del 对象名
5.当1个变量保存了对象的引用,此时对象引用计数器就加1,
当使用del删除变量指向的对象时,引用计数器就减1,当减到0时,就调用析构函数
6.作用:通常是销毁/删除临时的变量,主要对那些长期占用内存的临时变量进行销毁.有些程序是不结束的或运行很久的
7.对象的大小取决于成员变量的大小
魔法方法
魔法方法:很魔幻
格式:__xxxx__(self)
xxxx有很多,如:
add 加法(两个对象相加时调用)
lt 小于(两个对象比较时调用)
str 字符串(打印对象时调用)
....