【100天精通python】Day11:面向对象编程_类的定义和使用

简介: 【100天精通python】Day11:面向对象编程_类的定义和使用

eae51f1d37914662a336f14f1089168e.png

1. 面向对象的程序设计概述

       面向对象的程序设计(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和行为封装在一个称为对象的单元中,通过定义类和实例化对象来实现代码的组织和复用。

       在面向对象编程中,程序被组织成一系列相互关联的对象,每个对象都有自己的状态(属性)和行为(方法)。类是对象的蓝图,用于定义对象的结构和行为。

       Python是一种支持面向对象编程的高级编程语言,它提供了类、对象、继承、封装、多态等面向对象的特性。下面是一些常用的面向对象编程的概念:

  1. 类(Class):类是对象的模板或蓝图,用于定义对象的属性和方法。通过class关键字来创建类。
  2. 对象(Object):对象是类的一个实例,它具有类定义的属性和方法。通过实例化类来创建对象。
  3. 属性(Attribute):属性是对象的状态,它用于存储数据。可以通过点操作符(.)来访问对象的属性。
  4. 方法(Method):方法是对象的行为,它是类中定义的函数。方法与函数的区别在于,方法必须在类内部定义,并且第一个参数通常是self,表示该方法属于对象本身。
  5. 继承(Inheritance):继承是一种创建新类的方式,新类继承了现有类的属性和方法。通过继承,可以实现代码的复用和层次化组织。
  6. 封装(Encapsulation):封装是将数据和方法封装在一个对象中,隐藏对象的实现细节,只对外部提供接口。
  7. 多态(Polymorphism):多态是指不同类的对象可以对相同的方法做出不同的响应,从而提高代码的灵活性和可扩展性。

面向对象编程可以使代码更加模块化、易于理解和维护,是现代编程中广泛使用的编程范式之一。在Python中,面向对象编程可以应用于各种场景,包括创建图形界面、实现抽象数据类型、构建复杂系统等。

2 类的定义和使用

       在面向对象编程中,类是一种重要的概念,它用于定义对象的结构和行为。类是对象的蓝图或模板,通过类可以创建多个具有相同属性和方法的对象实例。类的作用主要包括:

  1. 封装数据和行为:类可以将数据(属性)和行为(方法)封装在一起,隐藏对象的内部实现细节,只对外部提供接口。这样可以增加代码的安全性和可维护性。
  2. 代码复用:通过定义类,可以实现代码的复用。在一个类中定义的属性和方法可以在多个对象实例中共享,避免重复编写相同的代码。
  3. 抽象数据类型:类可以用于定义抽象数据类型,将数据和相关操作封装在一起,形成更高层次的抽象。

类的定义和使用分为以下几个步骤:

2.1 定义类:

       使用class关键字定义一个类,并在类的内部定义类的属性和方法。

class MyClass:
    # 类的属性
    attr1 = 0
    attr2 = "Hello"
    # 类的方法
    def method1(self):
        return "Method 1"
    def method2(self):
        return "Method 2"

2.2 创建对象实例:

       使用类名后跟一对括号来创建类的对象实例。

obj = MyClass()

2.3 创建_init_() 方法

       在Python中,__init__()方法是一个特殊的方法,也被称为构造函数。它在创建类的对象实例时被调用,用于初始化对象的属性。在__init__()方法中,你可以指定对象的初始状态,为对象设置默认值,以及执行其他必要的初始化操作。

下面是一个示例,演示如何在类中创建__init__()方法:

class MyClass:
    # 初始化方法
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
    # 其他方法
    def method1(self):
        return "Method 1"
    def method2(self):
        return "Method 2"
# 创建对象实例并传递参数
obj = MyClass(10, "Hello")
# 访问对象的属性和调用方法
print(obj.attr1)    # 输出: 10
print(obj.attr2)    # 输出: Hello
print(obj.method1())    # 输出: Method 1
print(obj.method2())    # 输出: Method 2

在上面的示例中,我们在MyClass类中定义了__init__()方法,该方法接收两个参数attr1和attr2。在创建类的对象实例时,我们可以通过传递参数来初始化对象的属性。在__init__()方法内部,我们使用self.attr1和self.attr2来创建对象的属性,并将传入的参数赋值给它们。

       请注意,self是一个特殊的参数,它代表类的实例本身,用于引用对象的属性和方法。在__init__()方法中,需要使用self来设置对象的属性,以便这些属性可以在整个类的其他方法中使用。

       通过使用__init__()方法,我们可以确保在创建对象实例时,对象的属性得到正确的初始化,避免了在创建对象后还需要手动设置属性的麻烦。这使得代码更加简洁和易于维护。

2.4 创建类的成员并访问

在Python中,类的成员可以包括属性和方法。属性是类的数据成员,用于存储对象的状态信息,而方法是类的函数成员,用于定义对象的行为。

下面是一个示例,演示如何在类中创建属性和方法,并如何访问它们:

class MyClass:
    # 属性定义
    attr1 = "Hello"
    attr2 = 42
    # 方法定义
    def method1(self):
        return "Method 1"
    def method2(self):
        return "Method 2"
# 创建对象实例
obj = MyClass()
# 访问属性
print(obj.attr1)    # 输出: Hello
print(obj.attr2)    # 输出: 42
# 调用方法
print(obj.method1())    # 输出: Method 1
print(obj.method2())    # 输出: Method 2

 在上面的示例中,我们在MyClass类中定义了两个属性attr1和attr2,以及两个方法method1()和method2()。在创建类的对象实例后,我们可以使用点运算符来访问对象的属性和调用对象的方法。

       注意,在方法的定义中,我们使用了特殊参数self,它代表类的实例本身,用于引用对象的属性和方法。在访问属性和调用方法时,我们需要使用self来指定对象的上下文。

如果想要在类的外部访问类的成员,可以通过对象实例来访问。例如,obj.attr1用于访问attr1属性的值,obj.method1()用于调用method1()方法。

       需要注意的是,类的属性和方法是类的所有实例共享的。这意味着,无论创建多少个对象实例,它们都共享相同的属性和方法。

2.5 访问限制

       在Python中,可以使用访问限制来控制类的属性和方法是否可以从类的外部进行访问。通过访问限制,可以确保类的内部状态和行为不会被意外修改或访问,提高代码的封装性和安全性。

在Python中,有三种访问限制方式:

2.5.1 公开访问(Public Access):

       默认情况下,类的属性和方法都是公开的,可以从类的外部直接访问。例如,前面示例中的attr1和method1()就是公开访问的。

2.5.2 私有访问(Private Access):

       在属性或方法的名称前面加上两个下划线__,可以将其设置为私有成员,表示这些成员只能在类的内部访问,不能从类的外部直接访问。例如:

class MyClass:
    def __init__(self):
        self.__private_attr = "Private Attribute"
    def __private_method(self):
        return "Private Method"

在上面的例子中,__private_attr和__private_method()都是私有成员,只能在类的内部访问,无法从类的外部直接访问。

2.5.3 受保护访问(Protected Access):

       在属性或方法的名称前面加上一个下划线_,可以将其设置为受保护的成员,表示这些成员可以在类的内部和子类中访问,但在类的外部不能直接访问。例如:

class MyBaseClass:
    def __init__(self):
        self._protected_attr = "Protected Attribute"
    def _protected_method(self):
        return "Protected Method"
class MySubClass(MyBaseClass):
    def print_protected(self):
        print(self._protected_attr)
        print(self._protected_method())

在上面的例子中,_protected_attr和_protected_method()都是受保护成员,在MyBaseClass中定义,但在MySubClass中可以通过继承来访问。

需要注意的是,虽然Python中提供了访问限制的方式,但实际上并没有严格的强制规定。私有成员和受保护成员仍然可以通过特定的方式从类的外部进行访问,但这是一种约定俗成的行为,建议开发者遵循访问限制的约定,以保证代码的封装性和安全性。  


目录
相关文章
|
1月前
|
传感器 物联网 机器人
定义微Python
MicroPython 是一种精简高效的 Python 解释器,专为微控制器和嵌入式系统设计,支持通过 Python 代码进行快速开发和调试。它具有低资源消耗的特点,适用于物联网设备。
106 62
|
11天前
|
Shell Python
[oeasy]python049_[词根溯源]locals_现在都定义了哪些变量
本文介绍了Python中`locals()`函数的使用方法及其在调试中的作用。通过回顾变量赋值、连等赋值、解包赋值等内容,文章详细解释了如何利用`locals()`函数查看当前作用域内的本地变量,并探讨了变量声明前后以及导入模块对本地变量的影响。最后,文章还涉及了一些与“local”相关的英语词汇,如`locate`、`allocate`等,帮助读者更好地理解“本地”概念在编程及日常生活中的应用。
26 9
|
1月前
|
数据采集 存储 XML
Python爬虫定义入门知识
Python爬虫是用于自动化抓取互联网数据的程序。其基本概念包括爬虫、请求、响应和解析。常用库有Requests、BeautifulSoup、Scrapy和Selenium。工作流程包括发送请求、接收响应、解析数据和存储数据。注意事项包括遵守Robots协议、避免过度请求、处理异常和确保数据合法性。Python爬虫强大而灵活,但使用时需遵守法律法规。
|
2月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
23 1
|
2月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
27 2
|
2月前
|
Java C# Python
Python学习七:面向对象编程(中)
这篇文章是关于Python面向对象编程的中级教程,涵盖了析构函数、对象的三大特征(封装、继承、多态)、类属性与实例属性、以及类方法与静态方法的对比。
27 2
|
2月前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
26 1
WK
|
2月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
21 0
|
2月前
|
Java Python
Python学习六:面向对象编程(上)
这篇文章是关于Python面向对象编程的基础知识,包括类和对象的概念、实例方法、属性、self关键字以及魔法方法等。
17 0
|
2月前
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
52 0