第十五节:类和对象的概念

第十五节:类和对象的概念

不过尔尔 3 2021-07-14

类(Class)

类是一个模板或蓝图,用于定义对象的结构和行为。它包括数据成员(属性)和方法(函数),描述了对象的特性和操作。类是一种自定义数据类型,允许你创建多个具有相同属性和方法的对象。

类的基本结构如下:

 class ClassName:
     # 属性
     attribute1 = value1
     attribute2 = value2
     
     # 方法
     def method1(self, parameter1, parameter2):
         # 方法的操作
         pass

对象(Object)

对象是类的实例,是根据类创建的具体实体。对象具有类定义的属性和方法,可以执行类中定义的操作。每个对象都是独立的,可以具有不同的属性值。

创建对象的基本语法如下:

 object_name = ClassName()

示例:

 # 定义一个类
 class Dog:
     # 构造方法
     def __init__(self, name, age):
         self.name = name
         self.age = age
     
     # 方法
     def bark(self):
         print(f"{self.name}在汪汪叫!")
 ​
 # 创建两个对象
 dog1 = Dog("旺财", 3)
 dog2 = Dog("小白", 2)
 ​
 # 调用对象的方法
 dog1.bark()  # 输出:旺财在汪汪叫!
 dog2.bark()  # 输出:小白在汪汪叫!

类的属性和方法

  • 类的属性(成员变量)存储对象的状态信息,可以通过点号访问。每个对象都有自己的属性副本。

  • 类的方法(成员函数)定义对象的行为,操作属性和执行任务。方法可以接受参数,并在方法内部使用。

构造方法 __init__()

构造方法是一个特殊的方法,用于在对象创建时进行初始化操作。它在类的实例化过程中自动调用,并可用于设置对象的初始状态。

示例:

 class Person:
     def __init__(self, name, age):
         self.name = name
         self.age = age
 ​
 person = Person("Alice", 30)

封装

封装是面向对象编程的一个原则,它指的是将类的内部数据和方法封装在类内部,通过公有接口(属性和方法)与外部世界交互。封装提供了数据隐藏和访问控制,防止外部直接访问对象的内部状态。

  • 公有属性和方法:可以从外部访问。

  • 私有属性和方法:不应该从外部访问,通常以双下划线 __ 开头。

示例:

 class BankAccount:
     def __init__(self, account_number):
         self.__account_number = account_number  # 私有属性
     
     def get_account_number(self):  # 公有方法
         return self.__account_number 
 ​
 account = BankAccount("12345")
 number = account.get_account_number()  # 调用公有方法

__account_number是一个私有属性,只能通过公有方法get_account_number()来访问

 class MyClass:
     def __init__(self):
         self.__my_private_variable = 10  # 私有属性
 ​
     def my_public_method(self):
         print("这是一个公有方法")
         self.__my_private_method()  # 在公有方法中调用私有方法
 ​
     def __my_private_method(self):
         print("这是一个私有方法")
 ​
 obj = MyClass()
 obj.my_public_method() # 调用公有方法
 ​
 # 尝试调用私有方法(会引发 AttributeError)
 # obj.__my_private_method()

my_public_method() 是一个公有方法,可以从类的外部调用。而 __my_private_method() 是一个私有方法,不应该从类的外部直接访问。当我们在公有方法中调用私有方法时,它可以正常工作。

从类的外部直接调用私有方法(解除注释最后一行的代码),将引发 AttributeError 异常,因为私有方法不能直接访问。

继承

继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以重用父类的代码,并可以添加自己的属性和方法。

示例:

 class Animal:
     def __init__(self, name):
         self.name = name
     
     def speak(self):
         pass
 ​
 class Dog(Animal):
     def speak(self):
         return f"{self.name}在汪汪叫!"
 ​
 class Cat(Animal):
     def speak(self):
         return f"{self.name}在喵喵叫!"

多态

多态是面向对象编程的一个特性,它允许不同类的对象对相同的方法名做出不同的响应。多态可以提高代码的可扩展性和可维护性。

示例:

 def animal_sound(animal):
     return animal.speak()
 ​
 dog = Dog("旺财")
 cat = Cat("小白")
 ​
 print(animal_sound(dog))  # 输出:旺财在汪汪叫!
 print(animal_sound(cat))  # 输出:小白在喵喵叫!

类和对象是面向对象编程的核心概念,它们允许你模拟现实世界的实体和行为,以创建复杂的程序结构。通过定义类和创建对象,可以更好地模拟和解决复杂的问题。