类与对象
学习定义类、实例属性/类属性、方法类型、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)
小结
class定义类,__init__初始化实例self指向实例本身__前缀实现私有化__str____add__定制行为
小练习
- 定义
Rectangle类,包含widthheight和area()方法 - 给 Rectangle 添加
__str__输出Rectangle(宽×高)