“用类管理学生信息时,总有人乱加无关属性?”
“想给属性加验证,又觉得get/set方法太麻烦?”
——学会基础面向对象后,下一步就是掌握进阶技巧,让你的类更安全、更简洁、更灵活。
今天这6个知识点(slots、@property、多重继承等),是Python开发者的“进阶标配”,学会了就能摆脱“新手代码感”。
一、用__slots__:给类“上锁”,禁止乱加属性
新手常犯的错:给Student实例加“height”“weight”等无关属性,导致数据混乱。__slots__能指定类的“允许属性列表”,禁止添加列表外的属性,像给类画了条“红线”。
class Student: __slots__ = ("name", "age", "__score") def __init__(self, name, age, score): self.name = name self.age = age self.__score = scores = Student("小明", 16, 85)s.age = 17
避坑点:__slots__只对当前类生效,子类需重新定义才会继承;属性列表里要包含私有属性(如__score),否则无法使用。
二、用@property:把方法“伪装”成属性,简洁又安全
之前用get_score()、set_score()控制成绩访问,代码有点啰嗦。@property装饰器能把方法变成“只读属性”,搭配@属性名.setter还能实现可控修改,兼顾简洁与安全。
class Student: def __init__(self, name, score): self.name = name self.__score = score @property def score(self): return self.__score @score.setter def score(self, new_score): if 0 <= new_score <= 100: self.__score = new_score else: raise ValueError("成绩必须在0-100之间")s = Student("小红", 92)print(s.score) s.score = 95
用@property后,代码更像“操作属性”,但背后藏着验证逻辑,这就是Python的“优雅”之处。
三、多重继承:一个类拥有多个“技能包”
之前学的是单继承(如高中生继承学生),但实际场景中,一个类可能需要多个类的功能。比如“学生会干部”既要会学生的学习,也要会干部的组织活动,这就需要多重继承。
class Student: def study(self): print("专注学习")
class Cadre: def organize(self): print("组织班级活动")class StudentCadre(Student, Cadre): def work(self): print("边学习边工作")sc = StudentCadre()sc.study() sc.organize() sc.work()
核心原则:继承顺序从左到右,若两个父类有同名方法,优先用左边父类的。多重继承别滥用,否则代码会变复杂。
四、定制类:让你的类“自带特效”
Python里的print()、len()等函数,能对列表、字符串生效,其实是因为它们的类定制了特殊方法(如__len__、__str__)。我们的类也能定制这些方法,实现“自带特效”。
class Student: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f"学生:{self.name},年龄:{self.age}" def __len__(self): return self.ages = Student("小李", 17)print(s) print(len(s))
常用的定制方法还有__iter__(让类可迭代)、__getitem__(让类支持下标访问),按需使用能让类更灵活。
五、枚举类:让常量“有名字”,避免魔法数字
管理学生性别时,用0代表男、1代表女,时间长了容易忘(这叫“魔法数字”)。枚举类能给这些数字起名字,代码可读性瞬间提升。
from enum import Enumclass Gender(Enum): MALE = 0 FEMALE = 1 class Student: def __init__(self, name, gender): self.name = name self.gender = genders1 = Student("小明", Gender.MALE)s2 = Student("小红", Gender.FEMALE)print(s1.gender) print(s1.gender.value)
优势:枚举值不能修改,避免误改;使用时不用记数字,直接用名字,团队协作更高效。
六、元类:类的“缔造者”,进阶中的进阶
元类是“创建类的类”,普通类是元类的实例。这个概念比较抽象,新手不用深究实现,但要知道它的核心用途:批量修改类的属性或方法。比如给所有Student子类加“school”属性。
class SchoolMeta(type): def __new__(cls, name, bases, attrs): attrs["school"] = "阳光中学" return super().__new__(cls, name, bases, attrs)class Student(metaclass=SchoolMeta): def __init__(self, name):
self.name = names = Student("小张")print(s.school)
元类多用于框架开发,新手先了解“有这个东西”即可,后续做复杂项目时再深入。
今天的6个知识点,核心是“优化类的设计”:
__slots__保证数据安全,@property简化接口,多重继承实现功能组合,定制类提升灵活性,枚举类增强可读性,元类实现批量控制。
新手不用一次性全掌握,先把@property和枚举类用熟,这两个在日常开发中最常用。
【今日任务】
定义一个“Teacher”类:
① 用__slots__限制属性为name、subject、salary;
② 用@property控制salary(范围3000-20000);
③ 定制__str__方法,输出“教师:XXX,教XXX”;
④ 创建实例测试。
以上就是今天给你分享的内容,觉得有用的话欢迎点赞收藏哦!
如果你也对Python这门编程感兴趣的话,欢迎加入我们。(小白也可以参加)
三更老师亲自上课示范,2天:理论+实操教学+直播教学演示+课后辅导
获取方式:
1.关注下方公众号↓↓↓↓
2.点赞+再看
3.在后台发送:“python” 即可
领取资料福利/开通上课权限
资料已经打包好了,需要的关注公众号发送“111”领取