“”"
@ 复习Python从入门到精通/明日科技编著(清华大学出版社)所记录的代码,个人记录不迷路。2023年1月30日
@ 面向对象程序设计的3个特点 封装 继承 多态
@ 类的__init__(self)方法第一个参数必须是self 类属性 实例属性
@ 访问限制:双下划线表示表示私有(private)类型成员,不允许类的实例进行访问,允许定义该方法的类本身对其进行访问或实例名._类名_xxx访问
@ 命名规则:类名(ClassName) 驼峰式命名 init(self)首尾双下划线一般表示定义特殊方法 __foo 双下划线表示私有类成员
@ @property 用此装饰器将方法转换为属性
“”"
“”"
类的创建语法
class ClassName:
statement
知识点: 双下划线表示表示私有(private)类型成员,不允许类的实例进行访问,只允许定义该方法的类本身对其进行访问;
__init__方法第一个参数必须是self参数
“”"
class StudentInfo:
# 类名各单词首字母大写
“”“学生信息”“”
number = 0
school_name = ‘江苏科技大学’
__health = ‘disease’ # 双下划线表示表示私有(private)类型成员,不允许类的实例进行访问,只允许定义该方法的类本身对其进行访问,
def __init__(self, name, age, gender, chinese_score, english_score): # __init__方法第一个参数必须是self参数
StudentInfo.number += 1
self.chinese_score = chinese_score
self.english_score = english_score
print("我是一个学生实例", "姓名", name, end='')
print(" 年龄", age, "岁", end='')
print("性别", gender, '语文成绩', self.chinese_score, '英语成绩', self.english_score)
def privateInfo(self): # 方法名中第一个单词首字母小写,其余单词首字母大写
print("健康状况", StudentInfo.__health, StudentInfo.school_name)
@property # 用此装饰器将方法转换为属性
def score(self):
return self.chinese_score + self.english_score, (self.chinese_score + self.english_score)/2
list1 = []
for i in range(2):
list1.append(StudentInfo(“李明” + str(i+1), 20, “男”, 80, 90))
print(“创建学生实例个数:”, StudentInfo.number)
print(“学校名称”, StudentInfo.school_name)
print(“健康状况”, list1[1]._StudentInfo__health) # 可以通过类的实例名._类名_xxx访问,无法通过实例名访问
list1[1].privateInfo() # 调用类的方法无需添加self参数
stu_01 = StudentInfo(“王雷”, 20, “男”, 80, 90)
print(stu_01)
print(‘通过类的方法调用类私有变量-学生健康状况’, end=‘’)
stu_01.privateInfo()
print(‘调用装饰器@property转换后的方法属性’, end=‘’)
print(stu_01.score)
“”"
从已有类(父类、超类、基类)中通过继承方式创建创建新类(子类、派生类)的过程。提供继承信息的类被称为父类(超类、基类);
类的继承语法
class ClassName(BaseClassName1, BaseClassName2, BaseClassName3):
statement
类的继承特点:
派生类中调用基类构造函数需要 super().init()
派生类中调用方法,首先查找派生类中是否有方法,接着查找上基类。调用基类的方法需要加上基类的类名。
派生类获得基类所有非私有方法、参数,对于基类私有方法,可以通过类的实例名._类名_xxx访问,无法通过实例名访问
“”"
class FemaleStudent(StudentInfo): # 类的继承,FemaleStudent类继承StudentInfo类信息
“”“类的帮助信息”“”
print(‘女学生派生类信息’)
school_name = ‘崇明女中’
def privateInfo(self): # 方法重写
print("健康状况", '女生很健康', FemaleStudent.school_name)
mary = FemaleStudent(“王芳”, 20, “女”, 100, 95)
print(mary.privateInfo()) # 正常输出外,输出none,啥原因?
print(mary.score)