类与对象

在 Python 中,是一个模版,用来定义对象的属性(特征)和方法(行为)。而对象是类的实例,也就是用类创建出来的具体“东西”。通过类和对象,我们可以用代码模拟现实中的事物和逻辑。


1. 什么是类?

类可以看作是蓝图模板,它定义了某一类对象具有的属性(数据)和方法(行为)。

  • 属性:表示对象的特征,例如“姓名”、“年龄”。
  • 方法:表示对象的行为,例如“吃饭”、“跑步”。

类的定义

用关键字 class 定义一个类:

class Person:
    # 构造方法:定义属性
    def __init__(self, name, age):
        self.name = name  # 定义姓名属性
        self.age = age    # 定义年龄属性

    # 定义一个方法
    def greet(self):
        print(f"你好,我叫 {self.name},今年 {self.age} 岁。")

2. 什么是对象?

对象是通过类创建的具体实例。类是抽象的,而对象是具体的。

创建对象

通过调用类,就可以创建对象:

# 创建对象
p1 = Person("小明", 18)
p2 = Person("小红", 20)

# 调用对象的方法
p1.greet()  # 输出:你好,我叫 小明,今年 18 岁。
p2.greet()  # 输出:你好,我叫 小红,今年 20 岁。

3. 类的基本组成

(1) 构造方法 __init__

  • 作用:在创建对象时自动执行,用于初始化对象的属性。
  • 格式
    def __init__(self, 参数1, 参数2, ...):
        self.属性名1 = 参数1
        self.属性名2 = 参数2
    

示例:

class Car:
    def __init__(self, brand, color):
        self.brand = brand  # 品牌
        self.color = color  # 颜色

my_car = Car("Tesla", "Red")
print(my_car.brand)  # 输出:Tesla
print(my_car.color)  # 输出:Red

(2) 方法

  • 普通方法:定义在类中的函数,表示对象的行为。
  • 调用方法:使用 对象名.方法名()

示例:

class Dog:
    def __init__(self, name):
        self.name = name
    
    def bark(self):
        print(f"{self.name} 正在汪汪叫!")

my_dog = Dog("旺财")
my_dog.bark()  # 输出:旺财 正在汪汪叫!

(3) 属性

  • 实例属性:通过 self.属性名 定义,只属于特定对象。
  • 类属性:属于整个类,由所有对象共享。

示例:

class Cat:
    species = "猫科动物"  # 类属性

    def __init__(self, name):
        self.name = name  # 实例属性

# 实例化对象
cat1 = Cat("喵喵")
cat2 = Cat("咪咪")

# 访问类属性
print(cat1.species)  # 输出:猫科动物
print(cat2.species)  # 输出:猫科动物

# 访问实例属性
print(cat1.name)  # 输出:喵喵
print(cat2.name)  # 输出:咪咪

4. 类的高级功能

(1) 继承

  • 定义:子类可以继承父类的属性和方法,并可以扩展或重写父类的行为。
  • 好处:代码复用,提高开发效率。

示例:

class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        print(f"{self.name} 发出叫声")

# Dog 继承自 Animal
class Dog(Animal):
    def speak(self):
        print(f"{self.name} 汪汪叫")

# 创建对象
dog = Dog("旺财")
dog.speak()  # 输出:旺财 汪汪叫

(2) 多态

  • 定义:不同子类可以定义自己的行为,但调用时表现为相同的接口。
  • 意义:可以使用统一的方式处理不同的子类对象。

示例:

class Cat(Animal):
    def speak(self):
        print(f"{self.name} 喵喵叫")

animals = [Dog("旺财"), Cat("小黑")]
for animal in animals:
    animal.speak()
# 输出:
# 旺财 汪汪叫
# 小黑 喵喵叫

(3) 私有属性和方法

  • 私有属性:以 __ 开头,只能在类内部访问。
  • 私有方法:只能在类内部调用。

示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.__age = age  # 私有属性

    def __secret(self):  # 私有方法
        print(f"{self.name} 的年龄是 {self.__age}")
    
    def show_secret(self):
        self.__secret()  # 在类内部调用私有方法

p = Person("小明", 18)
p.show_secret()  # 输出:小明 的年龄是 18

5. 总结

  1. 类是蓝图,对象是具体实例:用类定义属性和方法,用对象调用它们。
  2. 构造方法:初始化对象属性。
  3. 继承与多态:让代码更灵活复用。
  4. 属性和方法:是类与对象的核心。

通过掌握类与对象,能够用面向对象编程的方式设计和实现更复杂、更贴近现实的程序!