面向对象编程(抽象)
对象:特征和技能的结合体
面向对象编程:一个个对象进行交互
优点:扩展性非常强
缺点:逻辑非常复杂
类与对象
类(类别):一系列具有相同特征和技能的对象
现实世界中先有对象,后有类
# 定义学生
# 姓名: 猪瑞星
# 学号: 222222
# 学校: oldboy
# 技能: 选课,三十六变
# 姓名: 孔悟空
# 学号: 111111
# 学校: oldboy
# 技能: 选课,七十二变
# 姓名: 雷公
# 学号: 666666
# 学校: oldboy
# 技能: 选课,电闪雷鸣,开车
# 定义老师
# 姓名:tank
# 学校:oldboy
# 技能:教课,piao
# 姓名:nick
# 学校:oldboy
# 技能:教课,看书
Python中先有类,再有对象
class 类名(驼峰体): # 定义类,会直接运行类体代码
# 定义一系列特征
# 定义一系列方法
对象1 = 类名() # 实例化出对象
给对象定制独有的特征
class OldBoyStudent:
school = 'oldboy'
def __init__(self, name ,age):
self.name = name
self.age = age
def choose_course(self):
print('is choosing course')
stu1 = OldBoyStudent('a',1)
stu1.school
stu2 = OldBoyStudent('b',2)
stu2.scool
对象的属性查找顺序
class OldBoyStudent:
school = 'oldboy'
name = 'c'
def __init__(self, name ,age):
self.name = name
self.age = age
def choose_course(self):
print('is choosing course')
stu1 = OldBoyStudent('a',1)
stu1.school
stu2 = OldBoyStudent('b',2)
stu2.scool
先从对象本身查找,然后从类中查找,类中也没有则报错
类与对象的绑定方法
class OldBoyStudent:
school = 'oldboy'
def __init__(self, name ,age):
self.name = name
self.age = age
def choose_course(self):
print(id(self)) # 10000
print(self.school)
print(f'{self.name} is choosing course')
stu1 = OldBoyStudent('a',1)
stu1.choose_course() # self是对象本身
print(id(stu1)) # 10000
OldBoyStudent.choose_course(stu1)
类与数据类型
lis = list([1,2,3])
lis2 = list([1,2,3])
lis.append(4)
# list.append(lis,4)
对象的高度整合
用Python定义一个类
class Foo:
pass
obj = Foo()
obj.__dict__ # dict()
obj.__dict__['count'] # 太麻烦了
obj.count # 简单化了
obj.number = 3
def init(obj,name,age,gender):
obj.name = name
obj.age = age
obj.gender = gender
init(obj,'nick','18','male') # 麻烦
init(obj1, 'tank','73','female')
class OldBoyStudent:
name = ''
def __init__(self,name,age,gender): # self是对象本身 # __开头的方法会在某种情况自动调用,__init__在类实例化的时候自动调用
self.name = name
self.age = age
self.gender = gender
stu1 = OldBoyStudent('nick','18','male')
# 查找顺序 ,先从对象本身寻找,然后再去类中寻找,找不到报错
# 类与数据类型
lis = [1,2,3,4] # lis = list([1,2,3,4])
s = 'sdfsd' # s = str('sdfsd')
lis.append(5)
list.append(lis,5)
# 一个rw类赋予rw一对特征和一些技能,
# 类或对象就是一堆特征和技能的结合体,一般这个技能是拿来操控这个特征的
# rw1,rw2,rw3
# 面向对象编程: 不同对象之间再交互