面向对象基础

 

一、面向对象介绍

  • 面向过程的编程思想
        核心过程二字,过程指的是解决问题的步骤,即先干什么\再干什么\后干什么
        基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式

  优点:复杂的问题流程化\进而简单化
    缺点:可扩展性差

  • 面向对象的编程思想
        核心是对象二字,对象是特征与技能的结合体
        基于该思想编写程序(脑子始终想的是对象二字)就好比在创造一个世界,世界是由
        一个个对象组成,在上帝眼里任何存在的事物都是对象,任何不存在的事物也都可以造
        出来,是一种上帝式的思维方式

    优点: 可扩展性强
    缺点: 编程的复杂度要高与面向过程

  • 类:
        对象是特征与技能的结合体,而类则是一系列对象相同的特征与技能的结合体
        强调:
            1.对象是具体存在的事物,而类则一个抽象的概念
            2.站在不同的角度总结出的类与对象是不同的

在现实世界中:先有一个个具体存在的对象,然后随着人类文明的发展才总结出类的概念

在程序中: 先定义类,后调用类来产生对象
重点:面向对象的核心体现是将数据和处理数据的程序封装到对象中

二、类的使用

语法

  1 # 类的声明:
  2 '''
  3 class 类名:  # class定义类语法的关键字
  4     pass
  5 '''
  6 
  7 # 对象的产生: 对象的实例化
  8 '''
  9 对象1 = 类名()
 10 对象2 = 类名()
 11 对象3 = 类名()
 12 '''
 13 
 14 # 类与对象都有自己独立的名称空间,每一个被实例化出来的对象,名称空间也是各自独立
 15 # 所以类与对象都能额外添加 属性(变量) 和 方法(函数)
 16 
 17 # 重点:类一旦被加载(随着所属文件的加载就加载),就会进入类的内部执行类中的所有代码
View Code

1.先定义类:

  1 class OldboyStudent:
  2     #相同的特征
  3     school = 'oldboy'
  4 
  5     #相同的技能
  6     def choose_course(self):
  7         print('choosing course')
View Code

类是一系列对象相同的特征(变量)与技能(函数)的结合体,即类体中最常见的就是变量与函数的定义
但是其实类体中是可以存在任意python代码

类体代码会在类定义阶段立即执行,会产生一个类名称空间,用来将类体代码执行过程中产生的名字都丢进去,查看方式如下

  1 # print(OldboyStudent.__dict__) # 查看类的名称空间
  2 # print(OldboyStudent.school) #print(OldboyStudent.__dict__['school'])
  3 # print(OldboyStudent.choose_course)
  4 # OldboyStudent.school='OLDBOY' #OldboyStudent.__dict__['school']='OLDBOY'
  5 # OldboyStudent.country='China' #OldboyStudent.__dict__['country']='China'
  6 # del OldboyStudent.country # del OldboyStudent.__dict__['country']
  7 # print(OldboyStudent.__dict__)

总结:

#1. 类本质就是一个名称空间,或者说是一个用来存放变量与函数的容器
#2. 类的用途之一就是当做名称空间从其内部取出名字来使用
#3. 类的用途之二是调用类来产生对象

2.后调用类来产生对象
# 调用类的过程称之为类的实例化,调用类的返回值称之为类的一个对象/实例

  1 class OldboyStudent:
  2     #相同的特征
  3     school = 'oldboy'
  4 
  5     #相同的技能
  6     def choose_course(self):
  7         print('choosing course')

#调用类发生了什么?

1.调用类会产生一个类的对象返回

  1 stu1=OldboyStudent()
  2 stu2=OldboyStudent()
  3 stu3=OldboyStudent()
  4 
  5 # print(stu1.__dict__)
  6 # print(stu2.__dict__)
  7 # print(stu3.__dict__)

2.触发类中函数__init__的执行,将对象连同调用类括号内指定的参数一同传入__init__

  1 class OldboyStudent:
  2     #相同的特征
  3     school = 'oldboy'
  4 
  5     #           stu1,'李铁蛋',18,'male'
  6     def __init__(obj, name, age, sex):
  7         obj.name = name #stu1.name='李铁蛋'
  8         obj.age = age   #stu1.age=18
  9         obj.sex = sex   #stu1.sex='male'
 10 
 11     #相同的技能
 12     def choose_course(self):
 13         print('choosing course')
 14 stu1=OldboyStudent('李铁蛋',18,'male') #__init__(stu1,'李铁蛋',18,'male')
 15 stu2=OldboyStudent('赵钢弹',38,'female') #__init__(stu2,'赵钢弹',38,'female')
 16 stu3=OldboyStudent('刘银弹',28,'male') #__init__(stu3,'刘银弹',28,'male')

# 总结__init__的功能: 是在实例化时就为对象初始自己独有的特征
# 注意:不能有返回值

三.对象属性的查找顺序

  1 class People:
  2     # 类自带(不同在外界额外添加)的属性与方法
  3     identify = '人类'
  4     def sleep(self):
  5         print('睡觉')
  6 
  7 
  8 p1 = People()
  9 p2 = People()
 10 
 11 p1.identify = '新人类'
 12 print(p1.identify)  # 访问自己的
 13 p1.__dict__.clear()  # 删除自己的后
 14 print(p1.identify)  # 访问类的
 15 
 16 print(p2.identify)  # p2没有自己的,访问类的
 17 
 18 # 重点:属性的访问顺序:优先加载自身的名字,如果没有再考虑类的

转载于:https://www.cnblogs.com/king-home/p/10759513.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值