Python面向对象编程初探

目录

前言

一、面向对象

二、类和对象

(一)类

简介

定义类

(二)对象

简介

创建对象

(三)总结

三、实例属性和实例方法

(一)实例属性

创建的基本语法

使用示例

 (二)实例方法

定义实例方法的基本语法

调用示例方法的示例

(三)总结

四、类中的self

(一)基本概念

(二)作用

访问实例属性

调用其他实例方法

在构造函数中初始化对象

(三)总结

五、__init__方法

(一)__init__方法的特点

(二)基本语法

(三)示例

(四)总结


前言

上篇文章主要了解了python函数进阶,函数参数的高级用法,匿名函数和递归函数等,接下来咱们接着讲python中很重要的知识点-面向对象。


一、面向对象

Python的面向对象编程是一种将程序中的数据和函数封装在对象内部的编程方式。这种编程方式可以使代码更具结构性、模块化和可重用性。


二、类和对象

在Python中,类和对象是面向对象编程的核心概念。它们是组织代码、重用代码的基础。

(一)类

简介

类是对象的模板。它定义了对象的属性和方法,但本身并不实际占用内存。类是一种抽象的概念,只有在通过实例化创建对象时,类的定义才会转化为具体的实例。

定义类

类通过 class 关键字定义,类定义通常包括:

  • 属性: 类中定义的数据,描述对象的状态。
  • 方法: 类中定义的函数,描述对象的行为。
  • 示例:

    class Dog:
        # 类属性(可选)
        species = "Dog"
    
        # 初始化方法(构造函数)
        def __init__(self, name, age):
            self.name = name  # 实例属性
            self.age = age    # 实例属性
    
        # 实例方法
        def bark(self):
            return "旺旺"

    该示例中,Dog 类有一个类属性 species 和两个实例属性 nameage,以及一个实例方法bark()

    (二)对象

    简介

    对象是类的实例。通过类定义的模版,你可以创建多个对象实例,每个实例都可以拥有自己的属性值。对象是类的具体体现,代表了类中定义的现实世界的实体。

    创建对象

    # 创建一个 Dog 类的对象
    my_dog = Dog(name="Buddy", age=3)
    
    # 访问对象的属性
    print(my_dog.name)  # 输出: Buddy
    print(my_dog.age)   # 输出: 3
    
    # 调用对象的方法
    print(my_dog.bark())  # 输出: Buddy says woof!
    

    在这个例子中,my_dogDog 类的一个实例对象,它具有 nameage 属性,并且可以调用 bark 方法。

    (三)总结

  • 是对象的模版,定义了对象的结构和行为。
  • 对象 是类的实例,通过类的定义创建,具有类中定义的属性和方法。
  • 面向对象编程通过类和对象的概念,帮助我们更好地组织和管理代码,使得程序设计更加模块化和易于维护。


    三、实例属性和实例方法

    Python 中,实例属性和实例方法是面向对象编程的核心部分,它们是类的对象的组成部分。

    (一)实例属性

    实例属性是属于对象的属性,每个对象都有自己的实例属性。它们通常在类的构造函数 __init__ 中定义,并通过 self 关键字进行访问和赋值。

    创建的基本语法

    class Car:
        def __init__(self, make, model, year):
            self.make = make    # 实例属性
            self.model = model  # 实例属性
            self.year = year    # 实例属性

    在这个例子中:

  • makemodelyearCar 类的实例属性。
  • 每个 Car 对象都有这些属性,且每个对象可以有不同的属性值。
  • 使用示例

    my_car = Car("大众", "宝来", 2020)
    
    print(my_car.make)   # 输出: 大众
    print(my_car.model)  # 输出: 宝来
    print(my_car.year)   # 输出: 2020
    

     (二)实例方法

    实例方法是定义在类中的方法,用于操作实例属性或者执行与对象相关的任务。实例方法的第一个参数通常是 self,它代表调用该方法的对象实例。

    定义实例方法的基本语法

    class Car:
        def __init__(self, make, model, year):
            self.make = make
            self.model = model
            self.year = year
    
        def display_info(self):
            return f"{self.year} {self.make} {self.model}"
    

    在这个例子中,display_info 是一个实例方法,它访问对象的实例属性 makemodelyear,并返回一个格式化的字符串。

    调用示例方法的示例

    my_car = Car("大众", "宝来", 2020)
    
    print(my_car.display_info())  # 输出: 2020 大众 宝来
    

    (三)总结

  • 实例属性 是属于对象的变量,用于存储对象的状态。它们在类的构造函数 __init__ 中定义,并且每个对象可以有不同的属性值。
  • 实例方法 是定义在类中的函数,用于操作对象的实例属性或执行与对象相关的操作。它们通常以 self 作为第一个参数,以便访问和操作对象的属性和其他方法。
  • 实例属性和实例方法使得对象不仅可以存储数据,还可以执行与这些数据相关的操作,这使得面向对象编程更具灵活性和功能性。

    四、类中的self

    在 Python 中,self 是一个非常重要的概念,它在类的方法中扮演着关键角色。self 是实例对象的引用,允许实例方法访问和修改实例的属性和其他方法。

    (一)基本概念

  • self 是一个约定俗成的名称:self 只是一个约定的名称,代表类实例本身。在 Python 中,你可以用其他名称代替 self,但使用 self 是 Python 社区的惯例,能够提高代码的可读性和一致性。
  • self 不是 Python 关键字:self 并不是 Python 的保留字,它只是类方法中的一个普通参数。你可以用其他名称,但通常推荐使用 self。
  • (二)作用

    self的作用主要有三种:访问实例属性、调用其他实例方法和在构造函数中初始化对象。

    访问实例属性

    self 允许方法访问对象的实例属性。通过 self,你可以读取和修改对象的属性值。

    示例:

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def greet(self):
            return f"Hello, my name is {self.name} and I am {self.age} years old."
    

    在这个例子中,self.nameself.age 允许 greet 方法访问 Person 对象的 nameage 属性。

    调用其他实例方法

    self 还允许方法调用同一对象的其他实例方法。

    示例:

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def greet(self):
            return f"Hello, my name is {self.name} and I am {self.age} years old."
    
        def birthday(self):
            self.age += 1
            return f"Happy birthday, {self.name}! You are now {self.age} years old."
    

    在该例子中,birthday 方法通过 self 修改了 age 属性,并且可以调用 greet 方法来返回个性化的生日祝福。

    在构造函数中初始化对象

    self 用于初始化对象的属性,确保每个对象都有自己独立的属性值。

    示例:

    class Car:
        def __init__(self, make, model, year):
            self.make = make
            self.model = model
            self.year = year
    

    该例子中,self 用于在 Car 对象创建时设置 makemodelyear 属性。

    (三)总结

  • self 是实例方法的第一个参数:它代表当前对象本身,允许方法访问对象的属性和其他方法。
  • self 是约定的名称:虽然你可以使用其他名称,但 self 是 Python 社区的约定,能够提高代码的可读性。
  • self 使得对象能够维护自己的状态和行为:通过 self,每个对象可以独立地存储和管理其状态,并执行相关的操作。
  • 总之,self 是 Python 类中的一个重要机制,使得对象可以在其方法内部引用自己,从而实现数据封装和行为的组织。

    五、__init__方法

    __init__ 方法是一个特殊的方法,用于在创建类的实例时初始化对象的属性。方法通常被称为构造函数,尽管它并不是真正意义上的构造函数,而是初始化器。它为对象设置初始状态,并为其分配属性值。

    (一)__init__方法的特点

    __init__方法主要有以下4个特点:

  • 初始化对象:当你创建类的实例时,Python 会自动调用 __init__ 方法。这让你可以在对象创建时设置初始属性值。

  • 第一个参数是 self__init__ 方法的第一个参数必须是 self,它指向正在创建的实例对象。通过 self,你可以访问和设置对象的属性。

  • 可以接受其他参数:除了 self__init__ 方法可以接受其他参数,这些参数通常用于为对象的属性赋值。

  • 无需显式调用:你不需要手动调用 __init__ 方法。它会在创建对象时自动调用。

  • (二)基本语法

    示例:

    class MyClass:
        def __init__(self, param1, param2):
            self.attr1 = param1
            self.attr2 = param2
    

    该例子中:

  • param1param2 是传递给 __init__ 方法的参数。
  • self.attr1self.attr2 是实例属性,使用传入的参数进行初始化。
  • (三)示例

    class Dog:
        def __init__(self, name, age, breed):
            self.name = name  # 实例属性
            self.age = age    # 实例属性
            self.breed = breed  # 实例属性
    
        def bark(self):
            return f"{self.name} 旺旺"
    
    # 创建一个 Dog 类的实例
    my_dog = Dog("旺财", 3, "柯基")
    
    # 访问实例属性
    print(my_dog.name)  # 输出: Buddy
    print(my_dog.age)   # 输出: 3
    print(my_dog.breed) # 输出: 柯基
    
    # 调用实例方法
    print(my_dog.bark())  # 输出: 旺财旺旺
    

    该示例中:

  • __init__ 方法接收 nameagebreed 作为参数,并将它们赋值给 Dog 对象的实例属性 self.nameself.ageself.breed
  • 创建 my_dog 实例时,__init__ 方法自动被调用,初始化对象的属性。
  • (四)总结

  • __init__ 方法是初始化器:它用于在创建对象时设置初始属性值。
  • 自动调用:当你创建类的实例时,__init__ 方法会自动执行,无需手动调用。
  • 第一个参数 self__init__ 方法的第一个参数是 self,它指向新创建的实例对象,允许你设置该实例的属性。
  • 通过使用 __init__ 方法,你可以确保每个对象在创建时都有一个一致的初始状态,并且可以根据需要传递不同的参数来定制对象的属性。

    作者:黎戚

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python面向对象编程初探

    发表回复