PYTHON进阶-面向对象编程

简介: PYTHON进阶-面向对象编程

面向对象的介绍🫧

面向对象编程(Object-Oriented Programming,简称OOP)是一种程序设计思想,它将数据和处理数据的方法组合成一个类(Class),并通过实例化(Instantiation)这个类来创建对象(Object)。这些对象可以互相协作,通过消息传递(Message Passing)来完成程序的功能。

这样做的好处是,它使程序更加模块化、易于维护和扩展,提高了代码的复用性和可读性。

通俗地讲,面向对象就是将编程当成是一个事务,对外界来说,事务是直接使用的,不用去管它内部的情况.而编程就是设置事物能够做什么事.就像是洗衣机洗衣服一样,我们不需要知道它怎么洗的我们只需要用它做我们想做的事情例如洗衣服,烘干,脱水这些功能即可.

面向对象过程中,有两个重要组成部分: 类 和 对象.

洗衣机就是我们要使用的对象,它的图纸就是类,我们需要通过 类(图纸) 去创建 对象(洗衣机).

用类创建对象的过程也叫做实例化---->平时我们都叫做 实例化~

1.1定义类 的 语法:

class 类名():
    代码
    ......

类名遵循大驼峰命名习惯.

1.2创建对象(对象又名实例) 的 语法:

先有类名再有对象名

对象名 = 类名()

体验类和对象

#需求 : 洗衣机. 功能: 能洗衣服
# 1. 定义洗衣机类
"""
class 类名():
    代码
"""
class Washer():
    def wash(self):
        print("能洗衣服")
# 2. 创建对象--->先有类名再有对象
# 对象名 = 类名()
haier = Washer()
# 3. 验证成果
# 打印 haier 对象
print(haier)
# 使用 wash功能 -实例方法/对象方法  -- 对象名.Wash()
haier.wash()

self是什么?让我们通过打印它的内存地址来观察一下

#类里的self---指的是调用该函数的对象
#类:洗衣机 功能:洗衣服
class Washer:
    def wash(self):
        print("能洗衣服")
        print(self)
#利用类实例化对象
haier = Washer()
print(haier)#打印haier这个对象的内存地址
haier.wash()
#由于打印对象和打印self得到的内存地址相同.
# 所以self指的是调用该函数的对象---即haier

验证一个类是否可有多个对象,对象调用内存地址时,self地址是否相同

# 实验:1. 一个类可以创建多个对象; 2. 多个对象都调用函数的时候,self地址是否相同`
class Washer():
    def wash(self):
        print("洗衣服")
        print(self)
#创建对象-类名()
haier1 = Washer()
haier1.wash()

# 实验:1. 一个类可以创建多个对象; 2. 多个对象都调用函数的时候,self地址是否相同`
class Washer():
    def wash(self):
        print("洗衣服")
        print(self)
#创建对象1-类名()
haier1 = Washer()
haier1.wash()
#创建对象2-类名()
haier2 = Washer()
haier2.wash()

结论:一个类可以创建多个对象,且每个对象的内存地址截然不同


添加和获取对象属性🔅

1.类外 - 添加和获取对象属性🍬

#添加和获取对象属性
#属性即特征 --- 宽度,高度,质量等
#类 外面添加对象属性    语法: 对象名.属性名  = 值
class Washer():
    def wash(self):
        print("能洗衣服")
#创建对象
haier1 = Washer()
#类外添加对象属性
#给对象添加属性  对象名.属性名 = 值
haier1.width = 500
haier1.height = 800
#获取属性  对象名.属性名
print(f"洗衣机的宽度是{haier1.width}")
print(f"洗衣机的高度是{haier1.height}")

2.类内 - 获取对象属性🍭

#属性即特征 --- 宽度,高度,质量等
#类 添加对象属性    语法: 对象名.属性名  = 值
class Washer():
    def wash(self):
        print("能洗衣服")
    # 定义一个函数获取实例属性
    def print_info(self):
        # 类内获取对象属性 --- self.属性名
        #print(self.width)
        print(f"洗衣机的宽度是{self.width}")
        print(f"洗衣机的高度是{self.height}")
#创建对象
haier1 = Washer()
#给对象添加属性  对象名.属性名 = 值
haier1.width = 500
haier1.height = 800
#对象调用实例方法
haier1.print_info()

魔法方法 __init__🪄

因为洗衣机在没有使用之前它就具有,高度,宽度这些属性,我们可以在生产过程中就赋予这些属性.

(在创建洗衣机对象之前它就有这些属性,所以这些属性是在类里面)

魔法方法__init__是Python类中的一个魔法方法,用于在创建类的实例对象时进行初始化操作。通俗的来讲,就是在一个类中定义了__init__方法,当你创建这个类的实例对象时,Python会自动调用这个方法进行初始化操作,对对象的各个属性进行赋值或者其他操作。

类似于生产一个产品的时候,要对产品进行初始化,比如给它设置一些属性、赋予一些特定的功能等等。

我们可以利用 __init__()方法

__init__()方法的作用: 初始化对象---无需手动调用

#目标: 定义init魔法方法设置初始化属性 并访问调用
"""
1.定义类
    init魔法方法: width 和 height
    添加实例方法: 访问实例属性
2. 创建对象
3. 验证成果
    调用实例方法
"""
class Washer():
    def __init__(self):#__init__()方法的作用 : 初始化对象
        #添加实例属性
        self.width = 500
        self.height = 800
        #实例方法
    def print_info(self):
        #类里面调用实例属性
        print(f"洗衣机的宽度是{self.width}")
        print(f"洗衣机的高度是{self.height}")
#创建对象(实例化)
haier = Washer()
#当对象调用实例方法时才能打印出对应魔法方法里面设定的属性值
haier.print_info()

注意:

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

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

在类外给对象添加的属性与使用魔法函数添加的属性之间有几个区别:

  1. 范围不同:在类外部添加属性,它们只被添加到特定实例中,在整个类和其他实例中是不可见的。而使用魔法函数,添加的属性是与类相关的,因此它们在整个类和所有实例中都可见。
  2. 方法不同:在类外部添加属性,可以使用点运算符或者直接赋值的方式添加属性。而使用魔法函数,需要按照特定的格式编写函数,才能正确地添加属性。
  3. 继承不同:在类外部添加属性,对子类的影响通常是有限的。而使用魔法函数,可以添加到类的整个继承层次结构中,从而影响所有子类。
  4. 命名不同:在类外部添加属性时,可以使用任何有效的变量名。而使用魔法函数命名属性时,需要按照特定的格式命名,以避免与其他属性冲突。

总之,虽然两种方法都可以添加属性,但它们在范围、方法、继承和命名等方面有所不同,需要根据具体的使用场景进行选择。

 


带参数的__init__方法🧸

一个类创建多个对象,且每个对象具有不同的属性值

带参数的__init__方法是在定义类时设置的一种方法,它允许我们在创建对象时传入参数,从而初始化对象的属性或执行特定的操作。这样可以使得对象具有更灵活的属性和行为,更好地满足各种需求

# 1. 定义类: 带参数的init: 宽度和高度;
class Washer():
    def __init__(self,width,height):
        self.width = width
        self.height = height
    #实例方法: 调用实例属性
    def print_info(self):
        print(f"洗衣机的宽度是{self.width},高度是{self.height}")
# 2. 创建对象. 创建多个对象属性值不同; 然后调用它的实例方法
haier1 = Washer(10,20)
haier1.print_info()
#对象2:haier2
haier2 = Washer(100,200)
haier2.print_info()


魔法方法__str__🪄

当使用 print 输出对象的时候, 系统会自动默认打印出对象的内存地址.

若果 定义了 __str__ 方法,那么当我们 print(对象) 的时候 就会打印出从这个方法中 return 的数据.

所以魔法方法 __str__ 的作用就是: 返回类的作用或对象的状态

未定义魔法方法__str__,直接打印对象haier

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(100,200)
haier.print_info()
print(haier)

定义了魔法方法 __str__ 然后return了 "类的说明或对象状态的说明."

class Washer():
    def __init__(self,width,height):
        self.width = width
        self.height = height
    def print_info(self):
        print(f"这个洗衣机的宽度是{self.width},高度是{self.height}")
    def __str__(self):
        return "这个洗衣机出现故障"
haier = Washer(100,200)
haier.print_info()
print(haier)


魔法方法__del__🪄

作用:用于删除对象

class Washer():
    def __init__(self):
        self.width = 300
    def __del__(self):
        print("对象已删除")
haier = Washer()

目录
相关文章
|
30天前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
21 2
|
30天前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
20 1
|
2月前
|
存储 Java 程序员
30天拿下Python之面向对象编程
30天拿下Python之面向对象编程
17 3
|
2月前
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
|
30天前
|
Java Python
Python学习六:面向对象编程(上)
这篇文章是关于Python面向对象编程的基础知识,包括类和对象的概念、实例方法、属性、self关键字以及魔法方法等。
16 0
|
2月前
|
Python
全网最适合入门的面向对象编程教程:Python函数方法与接口-函数与方法的区别和lamda匿名函数
【9月更文挑战第15天】在 Python 中,函数与方法有所区别:函数是独立的代码块,可通过函数名直接调用,不依赖特定类或对象;方法则是与类或对象关联的函数,通常在类内部定义并通过对象调用。Lambda 函数是一种简洁的匿名函数定义方式,常用于简单的操作或作为其他函数的参数。根据需求,可选择使用函数、方法或 lambda 函数来实现代码逻辑。
|
3月前
|
Python
Python 中的面向对象编程 (OOP)
【8月更文挑战第29天】
34 7
|
3月前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
3月前
|
Python
|
3月前
|
存储 Java C#
详解 Python 中的面向对象编程(2)
详解 Python 中的面向对象编程(2)
45 10
下一篇
无影云桌面