面向对象编程

一、两大编程思想        

在编程中,面向过程和面向对象是编程的两大编程思想

什么是面向过程

面向过程中核心是过程二字,过程就是先干什么、在干什么、最后干什么,就是机械式的思维方式

案例:
        把大象放冰箱需要几步?
        1. 打开冰箱门
        2. 把大象放进冰箱
        3. 关上冰箱门
   生活中很多很多的例子都是面向过程的

优点:复杂的问题简单化、进而流程化
缺点:扩展性差,牵一发而动全身
应用场景: 一般用在对扩展性要求比较差的情况

什么是面向对象

面向对象也是一种编程的思想,不是一门新的技术栈

”面向对象“的核心是“对象”二字 ,而对象的精髓在于“整合“,什么意思?

所有的程序都是由”数据”与“功能“组成,因而编写程序的本质就是定义出一系列的数据,然后定义出一系列的功能来对数据进行操作。对象就是盛放'数据属性'和'功能'的容器,或者说”对象“就是一个盛放数据与功能的容器/箱子/盒子。

二、 类与对象

类即类别/种类,如果多个对象有相似的数据与功能,那么该多个对象就属于同一种类。有了类的好处是:我们可以把同一类对象相同的数据与功能存放到类里,而无需每个对象都重复存一份,这样每个对象里只需存自己独有的数据即可,极大地节省了空间。所以,如果说对象是用来存放数据与功能的容器,那么类则是用来存放多个对象相同的数据与功能的容器

在程序中,必须要事先定义类,然后再调用类产生对象(调用类拿到的返回值就是对象)。产生对象的类与对象之间存在关联,这种关联指的是:对象可以访问到类中共有的数据与功能,所以类中的内容仍然是属于对象的,类只不过是一种节省空间、减少代码冗余的机制,面向对象编程最终的核心仍然是去使用对象。 

 类的定义与实例化

class Student: # 类的命名应该使用“驼峰体”

    school='清华大学' # 数据

    def choose(self): # 功能
        print('%s is choosing a course' %self.name)

类体最常见的是变量的定义和函数的定义,但其实类体可以包含任意Python代码,类体的代码在类定义阶段就会执行,因而会产生新的名称空间用来存放类中定义的名字,可以打印Student.__dict__来查看类这个容器内盛放的东西

print(Student.__dict__)

用类的过程称为将类实例化,拿到的返回值就是程序中的对象,或称为一个实例

stu1=Student() # 每实例化一次Student类就得到一个学生对象

三、定制对象自己独有的属性

class Student:
    school='清华大学'
    
    #该方法会在对象产生之后自动执行,专门为对象进行初始化操作,可以有任意代码,但一定不能返回非None的值
    def __init__(self,name,sex,age):
        self.name=name
        self.sex=sex
        self.age=age
        
    def choose(self): 
        print('%s is choosing a course' %self.name)
#进行实例化
stu1=Student('kk','male',28)
#查看产生的对象名称空间
stu1.__dict__
{'name': 'kk', 'sex': 'male', 'age': 28}

属性查找顺序与绑定方法

对象的名称空间里只存放着对象独有的属性,而对象们相似的属性是存放于类中的。对象在访问属性时,会优先从对象本身的__dict__中查找,未找到,则去类的__dict__中查找

1. 类属性的查找
# 查
# print(Student.__dict__['school'])
print(Student.school)

# 增加
Student.x = 'xxx'
Student.z = 666
print(Student.__dict__)

# 改
Student.school = 'BJ'
print(Student.__dict__)

# 删除
del Student.school
print(Student.__dict__)

2. 对象自己的属性查找

# 对象的增删改查
stu = Student('kevin', 19, 'male')

# 1. 查
print(stu.name)
print(stu.age)
print(stu.gender)
# print(stu.x)
print(stu.school) # SH  #### 如果你使用的是点语法,那么,对象查找属性的时候,先从对象自己的名称空间中查找,如果找不到,就去产生这个对象的类中查找

"""如果你使用的__dict__取值,只能够取到对象自己名称空间中得属性,不会去类中查找"""
# print(stu.__dict__['school'])
print(stu.__dict__)

# 增加
stu.x = 666
# stu1.x = 999


# 改
stu.x = 99

# 删除
# del stu.x
del stu.school
print(stu.__dict__)

小练习

定义一个类,产生一堆对象,然后定义一个计数器,记录产生了多少个对象
class Student():
    school = 'SH'
    count=0
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
        #self.count+=1 # self是对象自己
        #这里应用用类属性
        Student.count += 1


stu = Student('kevin', 19, 'male')
stu1 = Student('kevin1', 19, 'male')
stu2 = Student('kevin2', 19, 'male')
stu3 = Student('kevin3', 19, 'male')
stu4 = Student('kevin4', 19, 'male')
print(Student.count)
print(stu.count)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值