目录

Python面向对象(1)面向对象基础

Python面向对象(1)面向对象基础

学习目标

  • 理解面向对象
  • 类和对象
  • 添加和获取对象的属性
  • 魔法方法

理解面向对象

面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想。

例如:洗衣服,用手洗和机洗两种方式,手洗需要自己完成所有的过程,机洗可以把主要事务交给洗衣机,这样完成洗衣服这件事会更简单,且我们不需要关心洗衣机内部发生了什么事情。

总结:面向对象就是将编程当成一个事物,对外界来说,事物是直接使用的,不用去管他内部的情况,而编程就是设置事物能做什么事。


类和对象

例如:洗衣机描述洗衣服的过程中,洗衣机其实就是一个物品,即对象,那么洗衣机对象哪来的呢?

洗衣机是由工人制作出来,准确来说是工人根据设计师设计的功能图纸制作出来的。

在面向对象编程的过程中,有两个重要组成部分:对象。(类就如图纸,对象就洗衣机)

类和对象的关系:用创建(实例化)一个对象

理解类和对象

类是对一系列具有相同特征行为的事物的统称,是一个抽象的概念,不是真实存在的事物。

  • 特征即为属性(变量)
  • 行为即为方法(函数)

类比如是制造洗衣机要用到的图纸,类是用来创建对象的。

对象

对象是类创建出来的真实存在的事物,例如:洗衣机。

⚠️注意:先有类,再有对象。

面向对象的实现方法

定义类

Python2中类分为:经典类和形式类

  • 语法
1
2
3
4
5
class 类名(要继承的类的类名):
    """
    代码
    """
    ......

⚠️注意:类名要满足标识符命名规则,同时遵循大驼峰命名习惯

  • 体验
1
2
3
class Washer():
  def wash(self):
    print("我会洗衣服")
  • 拓展:经典类,不由任意内置类型派生出的类,称之为经典类。
1
2
3
class 类名:
	代码
  ......

创建对象

对象又名实例。

  • 语法:
1
对象名 = 类名()
  • 体验:
1
2
3
4
5
6
class Washer():
  def wash(self):
    print("洗衣服")
Haier = Washer()
print(Haier)		# <__main__.Washer object at 0x7fa349114fa0>
Haier.wash()		# 洗衣服

self

self指的是调用该函数的对象。

1
2
3
4
5
6
7
8
class Washer():
  def wash(self):
    print("洗衣服")	# 洗衣服 
    print(self)			# <__main__.Washer object at 0x7fb2dda4cfa0> 为Haier对象的地址

Haier = Washer()
print(Haier)	# <__main__.Washer object at 0x7fb2dda4cfa0>
Haier.wash()	

一个类创建多个对象

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class Washer():
  def wash(self):
    print("洗衣服")
    print(self)
      
Haier = Washer()
print(Haier)
Haier.wash()
"""
<__main__.Washer object at 0x7fb0f5914fa0>
洗衣服
<__main__.Washer object at 0x7fb0f5914fa0>
"""
Meidi = Washer()
print(Meidi)
Meidi.wash()
"""
<__main__.Washer object at 0x7fb0f5914ee0>
洗衣服
<__main__.Washer object at 0x7fb0f5914ee0>
"""

一个类可以实例化出多个对象,每个对象的内存地址不同。


添加和获取对象属性

属性即是特征,比如:洗衣机的高度、宽度、重量、颜色……

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

类外面添加对象属性

  • 语法
1
对象名.属性名 = 值
  • 体验
1
2
haier.width = 500
haier.height = 800

类外面获取对象属性

  • 语法
1
对象吗.属性名
  • 体验
1
2
3
Haier.height = 200
Haier.width = 200
print(Haier.width)			# 200

类里面获取对象属性

  • 语法
1
self.属性名
  • 体验
1
2
3
4
5
6
7
8
class Washer():
  def wash(self):
    print("洗衣服")			# 洗衣服
    print(self.width)		# 200
Haier = Washer()
Haier.height = 200
Haier.width = 200
Haier.wash()

魔法方法

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

魔法方法之一__init__()

洗衣机的高度宽度是与生俱来的属性,可不可以在生产过程中就赋予这些属性呢?答案是肯定的。

__init__()方法的作用就是初始化对象

1
2
3
4
5
6
7
8
9
class Washer():
    def __init__(self):
        self.width = 100
        self.height = 150
    def print_info(self):
        print(f'我的宽为{self.width},我的高为{self.height}')

Haier = Washer()
Haier.print_info()

⚠️注意:

  • __init__()魔法方法,在创建一个对象时默认被调用,不需要手动去调用。
  • __init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前对象的引用传递过去。

带参数的__init__()

一个类可以创建多个对象,对不同的对象设置不同的初始化属性需要传参数。

1
2
3
4
5
6
7
8
9
class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def print_info(self):
        print(f'我的宽为{self.width},我的高为{self.height}')

haier = Washer(222,333)     # 从实例化对象开始初始化参数
haier.print_info()

魔法方法之二__str__()

当print输出对象的时候默认打印对象的内存地址,如果类定义了__str__()方法,那么就会打印从在这个方法中return的数据。一般的__str__()方法放置的是解释类的作用或者解释类的状态的文字。

1
2
3
4
5
6
7
8
9
class Washer():
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def __str__(self):
        return '这是洗衣机的说明书'

haier = Washer(222,333)
print(haier)    # 这是洗衣机的说明书

魔法方法之三__del__()

删除对象时对象内存被自动释放时,Python解释器也会默认调用__del__()方法。

1
2
3
4
5
6
7
class Washer():
    def __init__(self):
        self.width = 200
    def __del__(self):
        print(f'对象{self}已删除')
# 这里实例化对象完成后程序结束因此对象内存被释放打印__del__()中的内容
haier = Washer()    # 对象<__main__.Washer object at 0x7faad834cfa0>已删除

总结

  • 面向对象编程思想是一种抽象的编程思维,面向对象就是将编程当成一个事物,我们不需要考虑整个任务过程,编程的主要目的只是去考虑这个事物的各项属性和各项功能,然后利用这个事物完成我们的任务就可以。
  • 类和对象的关系就如同机器图纸和洗衣机的关系,图纸即是类,规定了属性和方法,而洗衣机是通过图纸实例化出来的对象。两者的先后关系必定是先有类再有对象。
  • 创建类和利用类来实例化对象的语法如下,一个类可以创建多个对象。
1
2
3
4
class Washer():
  def wash(self): # self指的是调用该函数的对象
    # 代码
Haier = Washer() # 创建了一个Haier对象
  • 在类里面创建属性(初始化属性)使用魔法方法__init__(),在类外面创建属性需要使用对象名.属性名 = 值语法来创建属性;在类里面调用属性需要使用self.属性名来访问属性的值,在类外面调用属性时直接使用对象名.属性名来获取属性值。
  • 魔法方法__init__()__str__()__del__()是Python中具有特殊功能的函数,第一个是用来初始化类的属性的;第二个是用来在打印内存地址时返回信息的,一般信息为解释类或者类的状态的说明文字;第三个是类实例化的对象在内存被释放(或删除)情况下执行的操作。