Skip to content
浏览量:

python面向对象基础

在Python中如何创建类呢?需要通过关键字class 来定义类,Python 类的语法格式如下:

python
# 定义类
class 类名:
    # 定义方法
    方法列表...

对象

创建对象的语法格式如下:

properties
对象名 = 类名()    # 创建对象

在实际应用中,创建和使用对象的基本步骤如下:

properties
对象名 = 类名()
对象名.方法名()		#调用方法

案例👨‍💻:生产一台可以跑起来的车

python
# 1.定义类:class 类名:
class Car:
    # 1.1.定义方法:跑起来
    def run(self):
        print('能跑起来...')

# 2.创建对象:对象名 = 类名()
car = Car()
# 3.调用方法:对象.方法名()
car.run()

执行顺序

image-20230329104730634

2.3 [重点]self关键字

self也是Python内置的关键字之一,其指向了对象实例本身【对象自己】。

案例分析

1.了解self是什么,创建一个对象,输出对象名、self;

2.创建多个对象,查看self的结果;

python
# 1.定义类:class 类名:
class Car:
    # 1.1.定义方法:跑起来
    def run(self):
        print(f'self的结果{self}')
        print('能跑起来...')


# 2.创建对象:对象名 = 类名()
car = Car()
print(f'car对象结果{car}')
# 3.调用方法:对象.方法名()
car.run()

print('*' * 30)
# 3.创建对象:对象名 = 类名()
car2 = Car()
print(f'car2对象结果{car2}')
car2.run()

image-20230329110844227

image-20230329111334052

3.在类内部调用方法:一般用在私有方法上

python
# 1.定义类:类名使用大驼峰方式命名
class Car():
    def run(self):
        print('能跑起来...')

    # 在类内部调用方法:对象名.方法名()->self.方法名()
    def work(self):
        self.run()

# 2.定义对象:对象名一般小驼峰命名
car = Car()

# 3.调用方法:对象名.方法名()
car.work()

image-20230329111640476

image-20230812095619479

image-20230812100223180

添加和获取对象属性

添加属性

设置对象中属性是通过"."点来操作的,如下:

properties
对象名.属性 = 属性值

获取属性

在Python中,获取对象属性的方式如下:

properties
对象名.属性

内部获取对象属性

在类内部获取对象属性的方式,如下:

py
对象名.属性            
----
self.属性
  • 添加属性:

    • 在类的外部

      py
      对象名.属性名 = 4
  • 获取属性

py
在类的内部: self.属性
在类的外部: 对象.属性

魔法方法

在Python中,有一些可以给Python类增加魔力的特殊方法,我们称之为魔法方法。 在特殊情况下会被自动调用,不需要开发者手动去调用。 对于这些魔法方法,都有一个共同的特性,那就是它们总是被双下划线所包围,如下:

1.__init__() 2.__str__() 3.__del__()

properties
__魔法方法名__()

语法:

properties
class 类名:
	def __魔法方法名__(self[,xxx,xxx]):
		代码
		...
	# ...

5.2 [重点]__init__()方法

有没有办法能够在创建对象时,就把车这个对象的属性给设置好呢?

此时,就可以使用__init__()方法(也称为构造方法)了。

image-20230329144738647

在Python中,当新创建一个对象时,则会自动触发__init__()魔法方法。

魔法方法名称描述信息
__init__(self [, ...])当一个实例被创建时调用的初始化方法。

无参数的__init__()方法

无参数情况:当仅需在类内部使用及初始化某些属性时,可以使用,格式如下:

properties
def __init__(self):
	# 初始化属性     对象名.属性 = 属性值
	self.属性 = 属性值
    代码
    ......

例如,给车这个对象默认设置color(颜色)和number(轮胎数)为黑色、3个轮胎。

python
# 1.定义类
class Car:
    # 1.1 设置属性:__init__
    def __init__(self):
        self.color = 'red'
        self.number = 4

    # 1.2 获取属性: self.属性名
    def show(self):
        print(f'车身颜色:{self.color}')
        print(f'车轮数:{self.number}')


# 2.创建对象:对象名 = 类名()
car = Car()

# 2.1 获取属性
# 类内部
car.show()
# 类外部
# print(car.color)
# print(car.number)

image-20230329150129223

有参数的__init__()方法

有参数情况:当需要通过类外部传递相应变量值用于改变某些属性时,可以使用,格式如下:

properties
def __init__(self,参数1,参数2,...):
    代码
    ......

例如,通过外部给车这个对象设置color(颜色)、number(轮胎数)值。

python
# 1.定义类
class Car:
    # 1.1 设置属性:__init__
    def __init__(self, color, number):
        self.color = color
        self.number = number

    # 1.2 获取属性: self.属性名
    def show(self):
        print(f'车身颜色:{self.color}')
        print(f'车轮数:{self.number}')


# 2.创建对象:对象名 = 类名()
car = Car('black', 8)

# 2.1 获取属性
# 类内部
car.show()
# 类外部
# print(car.color)
# print(car.number)

image-20230329150958486

5.3 [重点]__str__()方法

当使用print输出对象时,默认打印对象的内存地址值【十六进制】。 若要让输出对象名时,不是内存地址值,应该要在类中定义str方法。

如果类定义了__str__方法,那么就会打印从在这个方法中 return的数据。

魔法方法名称描述信息
__str__(self)定义当被str()调用时的行为。

语法:

properties
class 类名:
	def __str__(self):
		代码
		...
		return 值   # 说明:值的类型必须是字符串类型

例如,在输出car对象时,把它的颜色color、轮胎数number属性值显示出来。

python
# 1,定义类
class Car:
    # 1.1 属性的设置
    def __init__(self):
        self.color = '红色'
        self.number = 4

    # 1.2 str:输出属性信息
    def __str__(self):
        # return f'{self.color}的汽车有{self.number}个车轮'
        print(f'{self.color}的汽车有{self.number}个车轮')



# 2.创建对象
car = Car()

# 3.打印对象
print(car)
  • 未实现str时输出内存地址

image-20230329154721590

  • 实现str时输出str的返回值

  • image-20230329154750404

  • 一定要有返回值,返回值必须是字符串类型的

image-20230329154818576

image-20230329154824003

5.4 [重点]__del__()方法

当删除对象时,Python解释器也会默认调用__del__()方法。

魔法方法名称描述信息
__del__(self)析构器,当一个实例被销毁时调用的方法。

👨‍💻👨‍💻例如,定义一个有品牌属性的车类,并使用__del__()方法删除对象查看效果。

python
# 1.定义类
class Car:
    # 1.1 属性赋值
    def __init__(self,color):
        self.color = color

    # 1.2 del魔法
    def __del__(self):
        print('自动调用了del魔法方法')

# 2.创建对象
car = Car('红色')
# 3.获取属性
# print(car.color)
del car
print(car.color)

image-20230329160057736

image-20230329160105271

5.5 【⚡️重点⚡️】内容总结

魔法方法: 与普通方法区别

  • 自动调用,特殊情况下
  • 前后被双下滑线包围

init方法:创建对象时自动调用,用来对对象属性进行赋值

  • 无参(self):在类内部进行属性值的确定
  • 有参: 通过类外部实现属性值的设置

str方法:print(对象)是自动调用,直接输出str方法返回的结果

del方法:删除对象时自动调用

  • 魔法方法
py
1 概念:满足规则后,被python解释器自动调用的方法
2 __str__()  当打印对象的时候,被自动调用
3 __init__() 创建对象的时候被调用;用来初始化对象的属性
4 __del__()  删除对象(对象被清零的时候)被自动调用,用来清理资源