day 19

面向对象基础

什么是面对对象

指的是一门编程思想

面对对象编程

核心是“对象”二字,对象指的是特征与技能的结合体

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

​ 优点:可扩展性高

​ 缺点:编写程序的复杂程度要远高于面向过程编程思想

面向过程编程

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

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

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

​ 缺点:可扩展性差

什么是类

对象是特征与技能的结合体,类是一系列对象相同的特征与技能的结合体

如何定义类

首定义类,后调用类创造对象。

定义类的语法

def 函数名():


class 类名:
	对象相同的特征
    对象相同的技能
           

class: 用户定义类的,class后跟的是类名

类名:类的名字,用来调用创造对象的。

注意:类名必须要遵循驼峰命名法,python在定义变量与函数时不推荐使用,但在定义类时推荐使用

在定义类发生的事情

1.类在定义时,会产生一个空的名称空间

2.会把类内部所有名字,扔进类的名称空间中

注意:类在定义阶段就已经产生好了名称空间,执行python文件时会执行类内部的代码

学生类:
相同特征 --》 类内部的变量
	school

相同技能 --》 类内部的函数
	learn
    choose_course
    
    
# 学生类
class OldStudent:
    school = 'oldboy'
    print('tank is handsome...')
    # xxx
    def learn(self):
        print('learn python...')
        
    def choose_course(self):
        print('choose_course...')
        
       
    # OldStudent --> 会指向类的名称空间
    print(OldStudent.__dict__)
    print(OldStudent.__dict__.get('school'))

对象

如何产生对象

语法:
	类名 + () 调用类产生对象    

名称空间的产生

1.类的名称空间在类定义阶段就已经产生了

2.对象的名称空间,在调用类时产生

# 学生类 
class OldStudent:
    # 若__init__中有self以外的参数,调用类时必须括号内传入参数
    def __init__(self,x,y,z):	# self --> 就是对象本身
        # print(self,x,y,z)
        # print('此处时__init__...')
        # 给对象添加特征的方式
        self.name = x
        self.age = y
        self,sex = z
        
    # 特征
    school = 'oldboy'
    # print('tank is handsome...')
    
    # 技能
    def learn(self):
        print('learn python...')
        
    def choose_course(self):	# self = None
        print('choose_course...')
                
*******调用类发生的事情“
	1.首先会产生一个空的对象,就是产生“对象的名称空间”。
    2.会自动触发__init__.
    3.会把对象本身以及括号内的参数一并传给__init__函数。
    
*******总结:调用类会产生一个对象,调用类的过程叫做类的实例化,产生的对象称之为类的一个实例。

对象与类的查找顺序

1.对象,属性。若对象本身有,则优先查找对象自己的。

2.若对象本身没有,则到类里面,若类也没有,则报错。

对象绑定方法的特殊之处

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

​ 1.由类来调用类内部的函数,该函数只是一个普通的函数。

​ 普通函数需要接收几个参数就得传入几个参数。

​ 2.由对象来调用称之为对象的绑定方法,

​ 不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中

​ ****对象的绑定方法,是由对象来调用的,

​ 特殊之处就是 把对象当作第一个参数传入该方法中

class OldStudent:
    def __init__(self,name,age,sex):
        self,name = name
        self,age = age
        self,sex = sex
        
    # 特征
    school = 'oldboy'
    # 技能
    def learn(self):	# 普通函数
        # print('stu',self)
        print('learn python...')
        
    def choose_course(self,course):		# self = 
        print(f'[{self.name}]choose_course {course}...')
       
# 对象之间与类的方法功能是一样的

原文地址:https://www.cnblogs.com/colacheng0930/p/11644492.html