欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python 面对对象基础

程序员文章站 2022-03-26 12:29:10
[TOC] 面向对象基础 面向对象编程(抽象) 回顾一下 面向过程编程(思想 ) 流水线 优点:逻辑清晰(逻辑一步步的,系统) 缺点:扩展性差(上一个函数的输出是下一个函数的输入) 面向对象编程(思想) 对象: 特征和技能的结合体 面对对象编程:一个个对象进行交互 优点:扩张性非常强 缺点:逻辑非常 ......

目录

面向对象基础

面向对象编程(抽象)

回顾一下

面向过程编程(思想 )

流水线

优点:逻辑清晰(逻辑一步步的,系统)

缺点:扩展性差(上一个函数的输出是下一个函数的输入)

面向对象编程(思想)

对象: 特征和技能的结合体

面对对象编程:一个个对象进行交互

优点:扩张性非常强

缺点:逻辑非常复杂

类与对象

类(类别):一系列具有相同特征和技能的对象

现实世界中先有对象,后有类

# 定义学生

    # 姓名: 猪瑞星
    # 学号: 222222
    # 学校: oldboy
        # 技能:选课,三十六变
    
    
    # 姓名: 孔悟空
    # 学号: 111111
    # 学校: oldboy
        # 技能:选课,七十二变
        
    # 姓名: 雷公
    # 学号: 666666
    # 学校: oldboy
        # 技能: 教课,piao
        
# 定义老师
    
    # 姓名: 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('gll',18)
stu1.school

stu2 = oldboystudent('nick',18)
stu2.school

对象的属性查找顺序

# 局部存在
class oldboystudent:
    school = 'oldboy'
    name ='nick'
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    def choose_course(self):
        print('is choosing course')
        
stu1 = oldboystudent('gll',18)
print(stu1.name) # gll

stu2 = oldboystudent('nick',18)
print(stu2.name) # nick

# 局部找不到
class oldboystudent:
    school = 'oldboy'
    name ='nick'
    def __init__(self,name,age):
        #self.name = name
        self.age = age
        
    def choose_course(self):
        print('is choosing course')
        

stu1 = oldboystudent('gll',18)
print(stu1.name) # nick

stu2 = oldboystudent('nick',18)
print(stu2.name) # nick

类与对象的绑定方法

class oldboystudent:
    school = 'oldboy'
    
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
     def choose_course(self):
        print(id(self))  #1983522658680
        print(self.school)
        print(f'{self.name} is choosing course')
        print(name)
        
stu1 = oldboystudent('gll',18)
stu1.choose_course() # self 是对象本身
print(id(stu1)) #1983522658680

oldboystudent.choose_course(stu1)

# 注:
# 针对类而言:choose_course里的self就是传的参数
# 针对对象而言:choose_course里的self就是对象本身

类与数据类型

lis = [1,2,3]
lis2 =list([1,2,3])
# 下面两式等同,理解参数self的概念
lis.append(4) # self自动传lis
# lis2.append(lis,4)  # 手动传lis

对象的高度整合

在类里面封装了一大堆特征/数据,然后又封装了一大堆方法(方法用来专门用来操控这些数据的),并且在这基础上对于不同对象,这些属性和方法有不一样

class animal:
    def __init__(self,attri,height,weight):
        self.attri = attri
        self.height = height
        self.weight = weight
    
    def jiao(self):
        print('self.attr,'开始叫了')
    
    def eat(self):
        print('self.attri,'开始吃饭了')
        
people = animal('人类',180,140)
dog = animal('狗',100,50)

people.eat()
dog.jiao()