面向对象基础
类和对象
- 类(Class):模板/蓝图,定义对象的属性和方法
- 对象(Object):类的实例,具体的存在
定义类
class Student:
"""学生类"""
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
self._grade = self._calc_grade()
def _calc_grade(self):
"""内部方法:计算等级"""
if self.score >= 90: return 'A'
elif self.score >= 80: return 'B'
elif self.score >= 70: return 'C'
elif self.score >= 60: return 'D'
return 'F'
def introduce(self):
return f"我叫{self.name},{self.age}岁,成绩{self.score}分,等级{self._grade}"
def __str__(self):
return f"Student(name={self.name}, age={self.age}, score={self.score})"
def __repr__(self):
return f"Student({self.name!r}, {self.age!r}, {self.score!r})"
创建对象
stu = Student('Alice', 18, 92)
print(stu.introduce()) # 我叫Alice,18岁,成绩92分,等级A
print(stu) # Student(name='Alice', age=18, score=92)
成员可见性
| 类型 |
命名规则 |
说明 |
| 公开成员 |
name |
可随意访问 |
| 受保护成员 |
_name |
约定不可直接访问,类内部和子类可用 |
| 私有成员 |
__name |
名称改名(Name Mangling),类内部可用 |
print(stu.name) # Alice - 公开成员
print(stu._grade) # A - 受保护(约定不访问)
# stu.__score # AttributeError - 私有成员
print(stu._Student__score) # 92 - 强制访问(不推荐)
特殊方法
__init__:构造器,创建对象时初始化
__str__/__repr__:字符串表示,print() 调用 __str__
__lt__/__le__:比较运算,支持 <、<=
__eq__:相等判断
__hash__:可哈希,用于集合/字典键
__len__/__getitem__:支持 len()、索引访问
__enter__/__exit__:上下文管理器,支持 with 语句
class Rect:
def __init__(self, w, h):
self.w, self.h = w, h
@property
def area(self):
return self.w * self.h
def __eq__(self, other):
return self.area == other.area
def __lt__(self, other):
return self.area < other.area
总结
- 类是模板,对象是实例;
__init__ 初始化实例属性
- 公开/受保护/私有成员通过命名约定区分
- 特殊方法(魔术方法)让对象支持 Python 语法特性