面向对象

面向对象(oop)基本概念
对比面向过程,我们之前的编程方式即为面向过程
1.过程和函数
过程 类似函数,只能执行,无返回值
函数 可执行,也可有返回值
2.面向过程 即怎么做?
把完成某一个需求的所有步骤从头到尾实现;根据需求,将某些功能独立的代码封装为许多函数;最后顺序调用不同函数
特点:注重步骤过程,不注重职责分工;若需求复杂,代码跟着复杂;开发复杂项目,无固定套路则开发难度大
在这里插入图片描述
3.面向对象 即谁来做?

相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个办法

步骤:
确定职责 ,要做的事(方法)
根据职责确定不同对象,对象内部封装不同方法
最后,完成代码即顺序的让不同的对象调用不同的方法
特点:
注重对象和职责,不同对象承担不同职责
更加适合对复杂的需求变化,是专门为复杂的项目开发提供的固定套路
需要在面向过程基础上学习些面向对象的语法

类和对象

1.类
是对一群具有相同特征行为的事物的统称,是抽象的,不能直接使用
特征 ---->属性
行为 ---->方法
(类相当于制造飞机的图纸,是一个模板,负责创建对象)
2.对象
是由类创建出来的一个具体的存在,可以直接使用
哪个类创建的对象,则拥有类对应的属性和方法
(对象就相当于用图纸制造的飞机)
3.二者关系
先有类,再有对象
类可有一个,对象可有多个
类中定义什么属性和方法,对象中就有什么属性和方法
不同对象之间属性可能会各不相同

类的设计
在这里插入图片描述

满足要素:
类名 这类事物的名字,满足大驼峰命名法
属性 该类事物具有特征
方法 该类事物具有行为

定义简单类

面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象就可以直接调用这些方法了
1.定义只包含方法的类

语法
class 类名:
    def 方法一(self,参数列表):  #定义方法
        pass
    def 方法二(self,参数列表):
        pass

区别在于,第一个参数必须是self
2.创建对象

对象变量=类名()

举例
小狗爱喝水,爱吃骨头

class dog:
    def eat(self):
        print('小狗爱吃骨头')
    def drink(self):
        print('小狗爱喝水')
x=dog()
x.eat()  #小狗爱吃骨头
x.drink()   #小狗爱喝水

3.引用

在python使用类 创建对象之后,x变量中仍然记录的是对象在内存中的地址
即tom变量引用了新建的狗对象
使用print输出对象变量,默认情况下,是能够输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中地址(十六进制表示)
提示:计算机中通常使用十六进制表示内存地址

class dog:
    def eat(self):
        print('小狗爱吃骨头')
    def drink(self):
        print('小狗爱喝水')
x=dog()
x.eat()  #小狗爱吃骨头
x.drink()   #小狗爱喝水
class dog:
    def eat(self):
        print('小狗爱吃骨头')
    def drink(self):
        print('小狗爱喝水')
x=dog()
x.eat()  #小狗爱吃骨头
x.drink()   #小狗爱喝水
print(x)  #<__main__.dog object at 0x000002155D3A2FC8>

#dog 类;object 对象名;0x000002155D3A2FC8> 十六进制数字,表示当前创建狗对象在内存中的位置

4.创建多个对象

class dog:
    def eat(self):
        print('小狗爱吃骨头')
    def drink(self):
        print('小狗爱喝水')
x=dog()
x.eat()  #小狗爱吃骨头
x.drink()   #小狗爱喝水
print(x)  #<__main__.dog object at 0x000002155D3A2FC8>
addd=id(x)
print("%x" %addd)  #167785900c8   十六进制输出
print("%d" %addd)  #2620629057992    十进制输出
y=dog()
y.eat()  #小狗爱吃骨头
y.drink()   #小狗爱喝水
addd=id(y)
print(y)  #<__main__.dog object at 0x0000027A91CE0248>
z=y
print(z)  #<__main__.dog object at 0x0000015B534F0288>    z=y地址

5.给对象增加属性
利用赋值语句,临时增加属性(不推荐)

在python中,给对象设置属性,非常容易大怒不推荐使用,因为对象属性的封装应当封装在类的内部

class dog:
    def eat(self):
        print('小狗爱吃骨头')
    def drink(self):
        print('小狗爱喝水')
x=dog()
x.eat()  #小狗爱吃骨头
x.drink()   #小狗爱喝水
print(x)  #<__main__.dog object at 0x000002155D3A2FC8>
x.name='x'   #利用赋值语句,临时增加属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值