""" 三大属性: 封装:储存数据,储存方法 继承:子继承父,方法继承,数据继承 多态:方法重写,内置函数重写 """ """ 继承 - 方法 现象: 代码不用子类写,但是可以直接使用 适用性: 多个类型有共性的代码,且在概念上统一 """ # 在设计软件时,应该先有子再有父 # 在编写软件时,应该先有父再有子 class Person: def say(self): print("讲话") class Student(Person): def play(self): self.say() print("玩耍") class Teacher(Person): def teach(self): print("教学") stu = Student() stu.play() # 创建子类对象,可以访问父类成员,也可以访问自身成员 tea = Teacher() tea.say() tea.teach() # 创建父类对象,只能访问自身成员 per = Person() per.say() # 关系的判定 # 1. 对象 是一种 类型 # isinstance(对象,类型) # 学生对象是一种学生类型 print(isinstance(stu, Student)) # True # 学生对象是一种人类型 print(isinstance(stu, Person)) # True # 人对象是一种学生类型 print(isinstance(per, Student)) # False # 2. 类型 是一种 类型 # issubclass(类型,类型) # 学生类型是一种学生类型 print(issubclass(Student, Student)) # True # 学生类型是一种人类型 print(issubclass(Student, Person)) # True # 人类型是一种学生类型 print(issubclass(Person, Student)) # False # 3. 对象的类型 是 类型 # type(对象) == 类型 # 学生对象的类型是学生类型 print(type(stu) == Student) # True # 学生对象的类型是人类型 print(type(stu) == Person) # False # 人对象的类型是学生类型 print(type(per) == Student) # False """ 继承 - 数据 """ class Person(object): def __init__(self, name="", age=0): # 3 self.name = name self.age = age class Student(Person): pass class Teacher(Person): def __init__(self, name, age, salary=0): # 2 super().__init__(name, age) self.salary = salary per_lmj = Person("lily", 26) # 1. 子类没有构造函数,使用父类的 stu_lmj = Student("lily", 26) print(stu_lmj.__dict__) # 2. 子类有构造函数,覆盖父类的 # 此时必须通过super()函数调用父类构造函数 tea_lmj = Teacher("lily", 26, 10000) # 1 print(tea_lmj.__dict__) """ 多态 -- 重写:在子类中,具有和父类相同(名称、参数)的方法 # 在特定的时机,由框架自动调用 # 方法重写,内置函数重写 """ # 魔法函数: class Person(object): def __init__(self, name="", age=0): # 3 self.name = name self.age = age # 自定义对象 --> 字符串 def __str__(self): return f"{self.name}的年龄是{self.age}" # 自定义对象 --> 整数 def __int__(self): return self.age ljm = Person("lily", 26) jzl = Person("jack", 25) print(ljm) # 直接打印自定义对象,<__main__.Person object at 0x7f5bc52747c0> print(jzl) # print函数内部: jzl.__str__() print(int(ljm)) # ----扩展:自定义对象与字典的转换---- print(ljm.__dict__) dict_ljm = {'name': 'lily', 'age': 26} print(Person(**dict_ljm))
Python重点知识二:面向对象的三大特点
于 2023-04-11 09:06:38 首次发布