Python 进阶 - 第十三节
📋 本节要点
| 知识点 | 说明 |
|---|---|
| 类 | 对象的模板/蓝图 |
| 对象 | 类的具体实例 |
__init__ |
创建对象时自动调用,初始化属性 |
self |
指向当前对象本身 |
| 类属性 | 所有对象共享的数据 |
| 实例属性 | 每个对象独有的数据 |
hasattr() |
检查对象是否有指定属性 |
| 封装 | 将数据和行为打包在类内部 |
1. 类与对象
面向对象编程(OOP)将数据(属性)和行为(方法)封装在一起。类是模板/蓝图,对象是根据模板创建的具体实例。
class 类名:
# 属性
属性名 = 值
# 方法
def 方法名(self, 参数):
方法体
核心概念:类(Class)— 抽象的模板,定义对象的属性和行为;对象(Object)— 类的实例,具体的存在;属性(Attribute)— 对象的特征/数据;方法(Method)— 对象的行为/函数。
2. 创建类与对象
最简单的类用 pass 占位,类名通常使用大驼峰命名法。
class Student:
pass
bart = Student()
bart.name = "Bart Simpson" # 动态添加属性
print(bart.name) # Bart Simpson
# isinstance() 检查对象是否是某个类的实例
print(isinstance(bart, Student)) # True
3. init 与 self
__init__ 是初始化方法,在创建对象时自动调用,用于初始化对象的属性。self 代表对象本身,用于在类的内部访问自己的属性和方法。
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name} 汪汪叫")
def eat(self):
self.bark() # 方法内部调用其他方法
print(f"{self.name} 吃骨头")
# 创建对象时传入参数
dog1 = Dog("旺财", 3)
dog2 = Dog("小白", 2)
# 访问属性
print(dog1.name, dog1.age) # 旺财 3
print(dog2.name, dog2.age) # 小白 2
# 调用方法
dog1.bark() # 旺财 汪汪叫
dog2.eat() # 小白 汪汪叫 \n 小白 吃骨头
4. 属性操作
class Person:
def __init__(self, name):
self.name = name # 实例属性
p = Person("张三")
# 获取属性
print(p.name) # 张三
# 修改属性
p.name = "王五"
print(p.name) # 王五
# 添加新属性
p.age = 20
print(p.age) # 20
# 删除属性
# del p.name
# 检查属性是否存在
print(hasattr(p, "name")) # True
print(hasattr(p, "score")) # False
5. 类属性(Class Attribute)
类属性在类内部直接定义,所有对象共享同一个类属性。通过类名修改类属性,所有对象都会感知到。
class Person:
head = 1 # 类属性
def __init__(self, name):
self.name = name # 实例属性
p = Person("张三")
q = Person("李四")
# 访问类属性
print(p.head, q.head) # 1 1
# 通过类名修改类属性(全局生效)
Person.head = 2
print(p.head, q.head) # 2 2
# 动态添加类属性
Person.finger = 10
print(p.finger, q.finger) # 10 10
类属性 vs 实例属性:类属性所有对象共享,修改一处全局生效;实例属性每个对象独有,互不影响。
6. 封装与参数验证
封装将数据(属性)和操作数据的方法打包在类内部,隐藏实现细节,保护数据安全。
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def get_grade(self):
if self.score >= 90:
return "A"
elif self.score >= 60:
return "B"
else:
return "C"
lisa = Student("Lisa", 99)
bart = Student("Bart", 59)
print(lisa.name, lisa.get_grade()) # Lisa A
print(bart.name, bart.get_grade()) # Bart C
7. 实战案例:学生信息管理
class Student:
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def show_info(self):
print(f"姓名:{self.name}")
print(f"年龄:{self.age}")
print(f"成绩:{self.score}")
def get_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"
else:
return "E"
# 创建学生对象
s1 = Student("张三", 18, 85)
s2 = Student("李四", 19, 92)
s1.show_info()
print("等级:", s1.get_grade())
print("---")
s2.show_info()
print("等级:", s2.get_grade())
运行结果:
姓名:张三
年龄:18
成绩:85
等级:B
---
姓名:李四
年龄:19
成绩:92
等级:A
下一节预告:继承与多态
评论区
0 条暂时还没有评论,欢迎来抢沙发。