Python面向对象基础

Python面向对象基础

一、面向对象编程思想

1、什么是面向过程

传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化!

→ 将要实现的功能描述为一个从开始到结束按部就班的连续的“步骤”

→ 依次逐步完成这些步骤,如果某一个步骤的难度较大,又可以将该步骤再次细化为若干个子步骤,以此类推,一直到结尾并得到我们想要的结果

就是把要开发的系统分解为若干个步骤,每个步骤就是函数,当所有步骤全部完成以后,则这个系统就开发完毕了!

2、什么是面向对象

​ 所谓的模拟现实世界,就是使计算机的编程语言在解决相关业务逻辑的时候,与真实的业务逻辑的发生保持一致,需要使任何一个动作的发生都存在一个支配给该动作的一个实体(主体),因为在现实世界中,任何一个功能的实现都可以看做是一个一个的实体在发挥其各自的“功能”(能力)并在内部进行协调有序的调用过程!

3、面向对象编程思想迁移

​ 以前写代码,首先想到的是需要实现什么功能——调用系统函数,或者自己自定义函数,然后按部就班的执行就行了!

​ 以后写代码,首先想到的是应该由什么样的主体去实现什么样的功能,再把该主体的属性和功能统一的进行封装,最后才去实现各个实体的功能。

​ 注意:面向对象并不是一种技术,而是一种思想,是一种解决问题的最基本的思维方式!

​ 所以,面向对象的核心思想是:不仅仅是简单的将功能进行封装(封装成函数),更是对调用该功能的主体进行封装,实现某个主体拥有多个功能,在使用的过程中,先得到对应的主体,再使用主体去实现相关的功能!

4、面向对象要比面向过程好?
  • ① 都可以实现代码重用和模块化编程,面向对象的模块化更深,数据也更封闭和安全

  • ② 面向对象的思维方式更加贴近现实生活,更容易解决大型的复杂的业务逻辑

  • ③ 从前期开发的角度来看,面向对象比面向过程要更复杂,但是从维护和扩展的角度来看,面向对象要远比面向过程简单!

  • ④ 面向过程的代码执行效率比面向对象高


二、面向对象的基本概念

1、面向对象两个比较重要概念

对象:

对象,object,现实业务逻辑的一个动作实体就对应着OOP编程中的一个对象!

所以:① 对象使用属性(property)保存数据!② 对象使用方法(method)管理数据!

类:

在Python中,采用类(class)来生产对象,用类来规定对象的属性和方法!也就是说,在Python中,要想得到对象,必须先有类!

为什么要引入类的概念? 类本来就是对现实世界的一种模拟,在现实生活中,任何一个实体都有一个类别,**类就是具有相同或相似属性和动作的一组实体的集合!**所以,在Python中,对象是指现实中的一个具体的实体,而既然现实中的实体都有一个类别,所以,OOP中的对象也都应该有一个类!

一个对象的所有应该具有特征特性信息,都是由其所属的类来决定的,但是每个对象又可以具有不同的特征特性信息,比如,我自己(人类)这个对象,名字叫老王,性别男,会写代码,会教书;另一个对象(人类)可能叫赵薇,性别女,会演戏,会唱歌!

2、类的定义

在Python中,我们可以有两种类的定义方式:Python2(经典类)和Python3(新式类)

经典类:不由任意内置类型派生出的类,称之为经典类

class 类名
	# 属性
    # 方法

新式类:

class 类名(object):
    # 属性
    # 方法

这就是一个类。其中,类名既可以使用大写形式也可以使用小写形式,遵守一般的标识符的命名规则(以字母、数字和下划线构成,并且不能以数字开头),一般为了和方法名相区分,类名的首字母一般大写!(大驼峰法)

基本语法:

class Person(object):
    # 属性
    # 方法
    def eat(self):
        print('吃零食')
    def drink(self):
        print('喝可乐')
3、类的实例化(创建对象)

类的实例化就是把抽象的事务具体为现实世界中的实体。

类的实例化就是通过类得到对象!

类只是对象的一种规范,类本身基本上什么都做不了,必须利用类得到对象,这个过程就叫作类的实例化!

基本语法:

对象名 = 类名()

在其他的编程语言中,类的实例化一般是通过new关键字实例化生成的,但是在Python中,我们不需要new关键字,只需要类名+()括号就代表类的实例。

示例:

# 把Person类实例化为对象p1
# 1、定义一个类
class Person(object):
    # 定义相关方法
    def eat(selfs):
        print('吃零食')

    def drink(self):
        print('喝果汁')


# 2、实例化对象
p1 = Person()
# 3、调用类中的方法
p1.eat()
p1.drink()

p2 = Person()

类是一个抽象概念,在定义时,其并不会真正的占用计算机的内存空间。但是对象是一个具体的事务,所以其要占用计算机的内存空间。

4、类中的self关键字

self也是Python内置的关键字之一,其指向了类实例本身。

# 1、定义一个类
class Dog():
    # 定义一个方法
    def speak(self):
        print(self)
        print('汪汪汪!!!')


# 2、类的实例化(生成对象)
d1 = Dog()
print(d1)
d1.speak()

d2 = Dog()
print(d2)
d2.speak()

'''
<__main__.Dog object at 0x000001E7F862C820>
<__main__.Dog object at 0x000001E7F862C820>
汪汪汪!!!
<__main__.Dog object at 0x000001E7F862C6D0>
<__main__.Dog object at 0x000001E7F862C6D0>
汪汪汪!!!
'''

一句话总结:类中的self就是谁实例化了对象,其就指向谁。


三、对象的属性添加与获取

1、什么是属性

在Python中,任何一个对象都应该由两部分组成:属性 + 方法

属性即是特征,比如:人的姓名、年龄、身高、体重…都是对象的属性。

​ 车的品牌、型号、颜色、载重量…都是对象的属性。

对象属性既可以在类外面添加和获取,也能在类里面添加和获取。

2、在类的外面添加属性和获取属性

语法:

# 添加
对象名.属性 = 属性值
# 获取
对象名.属性

实例:

# 1、定义一个类
class Dog():
    pass


# 2、类的实例化(生成对象d1)
d1 = Dog()
# 3、为d1对象添加属性
d1.name = '哈士奇'
d1.colour = '黑白'
d1.address = '北京'

# 4、获取p1对象的属性
print(f'姓名:{d1.name}')
print(f'颜色:{d1.colour}')
print(f'住址:{d1.address}')

'''
姓名:哈士奇
颜色:黑白
住址:北京
'''
3、在类的内部获取外部定义的属性
# 1、定义一个类
class Dog():
    def speak(self):
        print(f'姓名:{self.name},颜色:{self.colour},住址:{self.address}')


# 2、类的实例化(生成对象d1)
d1 = Dog()
# 3、为d1对象添加属性
d1.name = '哈士奇'
d1.colour = '黑白'
d1.address = '北京'

# 4、调用speak方法
d1.speak()

'''
姓名:哈士奇,颜色:黑白,住址:北京
'''

四、魔术方法

1、什么是魔术方法

在Python中,__xxx__()的函数叫做魔法方法,指的是具有特殊功能的函数。

魔术方法都有自己的触发条件:

__init__()当实例化对象时,其会自动被触发(被调用)

__del__()当手工删除对象或对象被销毁时,其会自动被触发(被调用)

2、__init__()方法(初始化方法或者构造方法)

实例化对象时,连带其中的参数,会一并传给__init__函数自动并执行它。__init__()函数的参数列表会在开头多出一项,它永远指代新建的那个实例对象,Python语法要求这个参数必须要有,名称为self。

示例:

# 1、定义一个类
class Dog():
    # 初始化实例对象属性
    def __init__(self, name, colour):
        # 赋予name属性、colour属性给实例化对象本身
        # self.实例化对象属性 = 参数
        self.name = name
        self.colour = colour


# 2、实例化对象并传入初始化属性值
d1 = Dog('柴犬', '黄色')
# 3、调用d1对象自身属性name与colour
print(d1.name)
print(d1.colour)

'''
柴犬
黄色
'''

1、__init__()方法,在创建一个对象时默认被调用,不需要手动调用

2、__init__(self)中的self参数,不需要开发者传递,Python解释器会自动把当前的对象引用传递过去。

3、__str__()方法

当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__方法,那么就会打印从在这个方法中 return 的数据。(另外要特别注意__str__方法返回字符串类型的数据)

示例:

# 1、定义一个类
class Dog():
    # 初始化实例对象属性
    def __init__(self, name, colour):
        self.name = name
        self.colour = colour

    def __str__(self):
        return f'姓名:{self.name},颜色:{self.colour}'


# 2、实例化对象并传入初始化属性值
d1 = Dog('柴犬', '黄色')
# 3、打印d1对象
print(d1)

'''
姓名:柴犬,颜色:黄色
'''
4、__del__()方法(删除方法或析构方法)

__init__方法与__del__方法时一对

当删除对象时(调用del删除对象或文件执行结束后),python解释器也会默认调用__del__()方法。

# 1、定义一个类
class Dog():
    # 初始化实例对象属性
    def __init__(self, name, colour):
        self.name = name
        self.colour = colour

    def __str__(self):
        return f'姓名:{self.name},颜色:{self.colour}'

    def __del__(self):
        print(f'{self.name}已经被删除')

# 2、实例化对象并传入初始化属性值
d1 = Dog('柴犬', '黄色')
# 3、删除d1对象
del d1

'''
柴犬已经被删除
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值