Z
ZHANK
面向对象

类与对象

学习定义类、实例属性/类属性、方法类型、self/cls

类与对象

面向对象编程(OOP)把数据和操作封装在一起。类是蓝图,对象是根据蓝图创建的实例。

学完本章你将掌握: class 定义、init 构造、self、属性方法、魔术方法。


一、定义一个类

python
class Dog:
    species = "犬科"        # 类属性(所有实例共享)

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

    def bark(self):
        print(f"{self.name}:汪汪!")

    def info(self):
        return f"{self.name}{self.age}岁,{self.species}"

dog1 = Dog("旺财", 3)
dog1.bark()          # 旺财:汪汪!
print(dog1.info())   # 旺财,3岁,犬科

二、self 是什么

self 代表当前实例,Python 自动传递。p.greet() 等价于 Person.greet(p)

python
class Person:
    def __init__(self, name):
        self.name = name
    def greet(self):
        print(f"你好,我是{self.name}")

p = Person("小明")
p.greet()

三、属性访问控制

python
class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.__balance = balance      # 私有(双下划线 → 名称改写)

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount
            return f"存入{amount},余额{self.__balance}"

    def get_balance(self):
        return self.__balance

acc = BankAccount("小明", 100)
print(acc.deposit(50))       # 通过方法操作
# print(acc.__balance)       # ❌ AttributeError

四、魔术方法

python
class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y
    def __str__(self):
        return f"Point({self.x},{self.y})"
    def __add__(self, other):
        return Point(self.x+other.x, self.y+other.y)
    def __eq__(self, other):
        return self.x==other.x and self.y==other.y

p1, p2 = Point(1,2), Point(3,4)
print(p1)           # Point(1,2)
print(p1 + p2)      # Point(4,6)

小结

  1. class 定义类,__init__ 初始化实例
  2. self 指向实例本身
  3. __ 前缀实现私有化
  4. __str__ __add__ 定制行为

小练习

  1. 定义 Rectangle 类,包含 width heightarea() 方法
  2. 给 Rectangle 添加 __str__ 输出 Rectangle(宽×高)