• 类和面向对象编程day19


    面向对象基础

    1. 什么是面向对象?

      指的是一门编程思想

    ​ 面向过程编程:

    ​ 核心是‘过程’二字,过程指的是做事情的步骤,即先做什么再做什么

    ​ 基于该编程思想编写程序,就好比一条工厂流水线,一种机械式的思维方式。

    ​ 优点:

    ​ 逻辑清晰,复杂的问题流程化,进而简单化。

    ​ 缺点:

    ​ 可扩展性差。

    ​ 面向对象编程:

    ​ 核心是‘对象’二字,对象指的是特征与技能的结合体。

    ​ 基于该编程思想编程,就好比创造世界,一种上帝式的思维方式。

    ​ 优点:

    ​ 可扩展性高。

    ​ 缺点:

    ​ 编写程序的复杂程度要远高于面向过程编程

    ​ 优先使用面向过程还是面向对象?

    ​ 面向过程结合面向对象一起使用。

    ​ 选课系统项目

    如何造对象?首先学习类

    什么是类?

    ​ 类型、类别、分类

    ​ 先定义类、后调用类产生对象

    -在现实世界中:

    ​ 对象是一个个具体存在的事物,类是由人类文明的发展抽象总结出来的。

    -在程序中:

    ​ 必须遵循,先有类,再有对象

    如何定义类:

    ​ 1.先从现实世界中,基于一个个的对象,抽取出来

    ​ 2.再定义类。

    类:对象是特征与技能的结合体,类是一系列对象相同的特征与技能的结合体
    先定义类、后调用类产生对象
    学生对象1:
    
    ​			特征:
    
    ​				school
    
    ​				name
    
    ​				ege
    
    ​				sex
    
    ​			技能:
    
    ​				learn
    
    ​				choice
    

    ​ 定义类的语法:

    def 函数名()
    
    class 类名:
    	对象相同的特征
        对象相同的技能
        
    class: 用来定义类的,class后跟的是类名。
    类名:类的名字,用来调用创造对象的。
    注意:类名必须要遵循驼峰命名法,
    python在定义变量与函数时不推荐使用,但在定义类时推荐使用。
    
    在定义类发生得到事情:
    	1.类在定义时,会产生一个类的名称空间。
        2.会把类内部所有名字,扔进类的名称空间中
        
        注意:类在定义阶段就已经产生好了名称空间,执行python文件时会执行类的内体代码
    
    学生类:
    	相同特征-->类内部的变量
        	school
        相同技能-->类内部的函数
        	learn
            choose_course
            
    
    class OldboyStudent:
        school = 'oldboy'
        
        def learn(self): # self对象自己
            print('learn python')
            
        def choose_course(self):
            print('choose course')
          
    OldboyStudent -->会指向类的名称空间
    print(OldboyStudent) 地址
    print(OldboyStudent.__dict__) 查看类的名称空间中所有名字(以key:value形式存在字典中)
    print(OldboyStudent.__dict__.get('school')) # oldboy
    
    查
    print(OldboyStudent.__dict__.get('school'))
    
    #改
    #OldboyStudent.__dict__['school']='oldgirl'
    #print(OldboyStudent.__dict__.get('school'))
    #报错 只能读,不能增删改
     
    
    类.特征或技能的方式对类内部的名字进行修改
    '.'会指向类内部的名称空间,从而获取名字
    # 查
    print(OldboyStudent.school) # oldboy
    # 改
    OldboyStudent.school ='oldgirl'
    print(OldboyStudent.school)
    # 增
    OldboyStudent.address = '上海'
    print(OldboyStudent.address) # 特征也称之为属性
    # 删除
    del OldboyStudent.address
    
    
    OldeboyStudent.choose_course(123)# 调用技能
    

    以上是类的所有操作

    如何产生对象:
       语法:
       	类名 + ()调用类产生对象
           
    名称空间的产生:
       1.类的名称空间在类定义阶段就已经产生了。
       2.对象的名称空间,在调用类时产生。
    
    OldboyStudent()#得到一个学生对象地址        
    stu1 = OldboyStudent()#赋值给变量,实体
    stu2 = OldboyStudent()
    stu3 = OldboyStudent()
    
    
    # .指向对象名称空间
    print(stu1.school)
    stu1.learn()
    print(stu2.school)
    stu2.learn()
    print(stu3.school)
    stu3.learn()
    
    问题:对象与对象之间的特征与技能一样。
    解决:在类内部定义__init__函数
    __init__:会在调用类时,自动触发该函数# 为对象初始化某些属性 
        def __init__(self):#self 对象本身
            
    调用类发生的事情:
    	1.首先会产生一个空的对象, 就是产生'对象的名称空间'
        2.会自动触发__init__.
        3.会把对象本身以及括号内的参数一并传给__init__函数。#stu3 = OldboyStudent()  
        
        若__init__中有self以外的参数,调用类时必须在括号内传入参数
        def __init__(self,x,y,z)
    stu1 = OldboyStudent('zzx',23,'male')
            
    
    #给对象添加属性一
    stu1.name = 'zzx'
    print(stu1.name)
    #给对象添加属性二
    	def __init__(self,x,y,z)
        self.name = x
        self.age = y
        self.sex = z 
    stu1 = OldboyStudent('zzx',23,'male') 
    print(stu1.name)
        
    

    对象与类的查找顺序

    对象查找特征优先自己的,然后找类的,没有则报错。

    对象绑定方法的特殊之处

    类内部的函数主要是给对象用的

    1. 由类来调用类内部的函数,该函数只是一个普通的函数,普通函数需要接收几个参数就得传入几个参数。
    2. 由对象来调用的函数称之为对象的绑定方法,不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中。
    print(OldboyStudent.learn) # function
    OldboyStudent.learn(123)
    
    stu1 = OldboyStudent('zzx',23,'male')# 实例一个对象
    stu1.learn()# 不用参数,stu1当作第一个参数传给了self
    
    
     #对象之间与类的方法功能是一样的
    OldboyStudent.learn(123)
    stu1.learn()
    # 内存地址不一样
    print(OldboyStudent.learn)
    print(stu1.learn)# 绑定了
    

    Python中一切皆对象

  • 相关阅读:
    23岁的这一年
    迁移ORACLE数据库文件到ASM
    无归档情况下使用BBED处理ORA-01113错误
    Oracle RMAN-06023 和ORA-19693错误
    手工创建Oracle数据库
    使用BBED理解和修改Oracle数据块
    Oracle 11g 重建EM需要删除的对象
    各大主流编程语言-常用爬虫框架以及优劣分析
    pyspider入门
    Centos7上安装docker及使用scrapy-splash
  • 原文地址:https://www.cnblogs.com/shin09/p/11643986.html
Copyright © 2020-2023  润新知