Python面向对象编程 VS 自带魔法方法

2023-06-1319:40:27编程语言入门到精通Comments879 views字数 4432阅读模式
Python是一门面向对象编程的语言,因此在Python中使用类和对象非常重要。类用于定义一种数据类型的结构,而对象则是该类的实例。本篇文章将介绍Python中类和对象的基础知识,并给出一些示例代码来说明如何使用它们。
Python面向对象编程 VS 自带魔法方法
python教程:类和对象

1.Python定义类

在Python中定义一个类非常简单,只需要使用class关键字即可。下面是一个简单的类定义示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

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

    def print_car_info(self):
        print(f"{self.make} {self.model} {self.year}")

这个Car类有三个属性:make、model和year,以及一个方法print_car_info。__init__方法是一个特殊的方法,用于初始化对象的属性。self参数表示该方法属于对象本身,因此在访问对象属性时需要使用self关键字。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

2. Python创建对象

一旦定义了一个类,就可以创建该类的对象。下面是一个创建Car对象的示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

my_car = Car("Toyota", "Camry", 2020)
my_car.print_car_info()

这里我们创建了一个名为my_car的Car对象,并将其传递给构造函数__init__。然后我们调用对象的print_car_info方法来打印该车辆的信息,输出结果应该是“Toyota Camry 2020”。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

3. Python类的属性和方法

在Python中,类还可以有自己的属性和方法。这些属性和方法是与类本身相关联的,而不是与对象相关联的。下面是一个示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

class Car:
    all_cars = []
    
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        Car.all_cars.append(self)

    @classmethod
    def print_all_cars(cls):
        for car in cls.all_cars:
            print(f"{car.make} {car.model} {car.year}")

这个Car类有一个名为all_cars的类变量,它用于存储所有的Car对象。构造函数__init__将每个新创建的对象添加到该列表中。此外,我们还定义了一个名为print_all_cars的类方法,用于打印所有已创建的汽车信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

4. Python中的继承

在Python中,类还支持继承。这意味着您可以从一个现有的类中创建一个新的类,并从原始类继承其属性和方法。下面是一个示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

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

    def print_sports_car_info(self):
        self.print_car_info()
        print(f"Top Speed: {self.top_speed}")

在这个示例中,我们从Car类派生出一个新的SportsCar类。SportsCar类有一个新的top_speed属性和一个新的print_sports_car_info方法,该方法打印汽车的信息以及速度。由于SportsCar类继承自Car类,因此它也具有Car类的所有属性和方法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

上一篇教程:Python教程:函数式编程[1]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

5.Python类的多态

Python还支持多态,这意味着您可以使用相同的代码处理不同类型的对象。下面是一个示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

def print_vehicle_info(vehicle):
    vehicle.print_car_info()

my_car = Car("Toyota", "Camry", 2020)
my_sports_car = SportsCar("Ferrari", "488 GTB", 2019, 205)

print_vehicle_info(my_car)
print_vehicle_info(my_sports_car)

在这个示例中,我们定义了一个名为print_vehicle_info的函数,它接受任何具有print_car_info方法的对象作为参数。然后,我们创建了一个Car对象和一个SportsCar对象,并将它们传递给print_vehicle_info函数。由于两个类都执行print_vehicle_info函数,它将打印出每个车辆对象的信息,例如车辆类型、颜色和速度。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

6.Python中的封装

在Python中,封装是指将数据和操作封装在一个对象中的关键的机制,并通过公共接口控制对其访问。在Python中,我们使用访问修饰符来实现封装。有两种常见的访问修饰符:公共和私有。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

  • • 公共成员:公共成员可以从任何地方访问。
  • • 私有成员:私有成员只能从类内部访问。

下面是定义一个Person类的示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        return self.name

    def set_name(self, name):
        self.name = name

    def get_age(self):
        return self.age

    def set_age(self, age):
        self.age = age

在上面的代码中,我们定义了一个名为Person的类。它有两个属性:name和age,以及四个方法:get_name、set_name、get_age和set_age。__init__方法是特殊的方法,用于初始化对象的属性。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

下面使用Person类,来实现访问类的成员:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

person = Person("Tom", 30)
print(person.get_name())
print(person.get_age())

person.set_name("Jerry")
person.set_age(20)

print(person.get_name())
print(person.get_age())

在上面的代码中,我们创建了一个名为person的Person对象,并调用了它的get_name和get_age方法来获取属性值。然后,我们使用set_name和set_age方法修改属性值,并再次打印属性值。接下来我们改造一下代码,以实现封装。下面是一个实现封装的示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def get_name(self):
        return self.__name

    def set_name(self, name):
        self.__name = name

    def get_age(self):
        return self.__age

    def set_age(self, age):
        self.__age = age

在上面的代码中,我们将name和age属性标记为私有成员,这意味着它们只能从类内部访问。然后,我们使用公共的get_name、set_name、get_age和set_age方法来访问和修改属性值。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

Python面向对象编程 VS 自带魔法方法
Python面向对象编程

7.Python的魔法方法

在Python中,方法命名为__xxx__的通常称之为“魔法方法”。魔法方法是Python中特殊的预定义方法,它们可以用于控制类对象的行为。我们来简单介绍几个python中的魔法方法,例如:当我们想要打印对象的内容时,可以通过__str__函数来实现文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

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

    def print_sports_car_info(self):
        self.print_car_info()
        print(f"Top Speed: {self.top_speed}")
    def __str__(self):
        return '品牌 %s, 型号%s,速度%d' % {self.make, self.model, self.top_speed}
        
# 然后在调用中使用print()
    my_sports_car = SportsCar("Ferrari", "488 GTB", 2019, 205)
    print(my_sports_car)

创建对象后,python解释器默认调用__init__()方法;当删除对象时,python解释器也会默认调用一个方法,这个方法为__del__()方法.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

Class Car:
    # __init__()方法及属性等参照上面的代码
    def __del__(self):
        print('%s 被删除了' % self.make)

my_car = Car("BENZ", 'S300L', '2019')

del(my_car)
# 打印内容
# BENZ 被删除了

8.总结

以上就是Python面向对象编程教程的全部内容,在本教程中,我们主要学习了如何定义类,创建对象,以及理解python面向对象编程中的封装、继承和多态。同时Python还自带魔法方法。熟练掌握这些概念和技术,可以使编写Python代码更加高效和灵活。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/46931.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/46931.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定