现在是北京时间06:55,早上06:44到达实验室,开始学习。对,昨天陪室友考教师资格证了,溜溜达达一天很舒服,两周一次的放松感。这几天和未来几天的压力真的很大,有很多要去学习的,比如Carsim、simulink、ROS2、Python、算法的文章,要尽快啃完,加油!
一、继承
先复习一下前天的学习内容。
class Car: 定义一个Car的类def __init__(self,brand): 参数为brandself.brand=brand 固定操作赋值def start(self): 定义类方法print('汽车已启动') 显示car=Car('梅赛德斯') 将Car类赋给car,可以任意调用 car.start() 调用类方法 print(car.brand) 调用参数brand
class Person(object): #定义一个类引用父类object 不写里面的也可以def __init__(self,name,age): 定义参数self.name=name self.age=age 基础操作赋值def info(self): 类方法print(self.name,self.age) 打印输出 class Student(Person): 定义子类引用上面的父类 def __init__(self,name,age,stu_no): 定义里面的参数 super().__init__(name,age) 引用父类中的name与age self.stu_no=stu_no 基础操作赋值 class Teacher(Person): 与上面相同操作 定义子类 def __init__(self,name,age,techofyear): 设置相应参数 super().__init__(name,age) 引用父类进行初始化self.techofyear=techofyear 基础操作赋值stu=Student('张三',20,2023204027) 给student设置参数 tea=Teacher('李四',40,10) 给Teacher设置参数 stu.info() student的引用父类 tea.info() teacger的引用父类
这是属于单继承关系,还有多继承关系。
1.2多继承关系
class A(object):pass class B(object): A与B同时继承objectpass class C(A,B): 此处C先继承A,再继承Bpass
1.3方法重写
子类重写后的方法中可以通过 super().xxx()调用父类中被重写的方法
xxx为父类中类方法的名字
但这样只有学号,我还想要其他信息没有怎么办?利用上述的办法重写结构
super().info()就可以调用父类中的类方法啦
class Person(object):def __init__(self,name,age):self.name=nameself.age=agedef info(self):print(self.name,self.age)class Student(Person):def __init__(self,name,age,stu_no):super().__init__(name,age)self.stu_no=stu_no def info(self):super().info()print(self.stu_no) class Teacher(Person):def __init__(self,name,age,techofyear):super().__init__(name,age)self.techofyear=techofyear def info(self):super().info()print(self.techofyear)stu=Student('张三',20,2023204027) tea=Teacher('李四',40,10) stu.info() tea.info()
1.4 object类
1.4.1 是所有类里的父类
1.4.2 内置函数dir()可以查看指定对象所有属性
1.4.3 object有一个_str_()方法
class Student:passstu=Student() print(dir(stu))
举一个例子:
class Student:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return ('我的名字是{0},年龄{1}岁'.format(self.name,self.age)) 熟练掌握
stu=Student('张三',20)
print(dir(stu))
print(stu) 默认调用__str__()这样的方法 用于返回对象的描述
2.多态
class Animal:def eat(self):print('动物会吃啥腻') class Cat(Animal):def eat(self):print('猫咪吃鱼') class Dog(Animal):def eat(self):print('狗吃骨头')def fun(obj): obj.eat() 这是一门动态语言学——python,不管你是什么类型,只要你存在这个行为,我就可以把你归为一类,去叫你。
3.特殊属性:
3.1 dir()
首先之前学的dir()可以查看该函数的特殊属性和方法
——————18:59——————
下午打了羽毛球,打得很舒服,这次没有感觉累,学会了用羽毛球拍捡球,真的好玩,有好几次球速度那么快我都能接到,真的运动可以锻炼反应能力,刚洗完澡来到实验室,今天的月亮好圆,祝大家中秋节小长假快乐呀——
3.2 __dict__ 可以查看对象的属性和方法
在 Python 中,__dict__
属性用于获取对象的字典,这个字典包含了对象的所有属性和方法。对于一个类的实例,__dict__
包含了实例的所有属性。
class A:pass class B:pass class C:def __init__(self,name):self.name=namex=C('Jack') print(x.__dict__)
x是C的实例对象, 其中只有一个参数name,用__dict__查看到属性为name,对应的值为Jack
这样可能看不明白,那么我再写一个就清楚了。
class A:pass class B:pass class C:def __init__(self,name,age):self.name=nameself.age=agex=C('Jack',20) print(x.__dict__)
这里的属性为键(key).
class A:pass class B:pass class C:def __init__(self,name,age):self.name=nameself.age=agex=C('Jack',20) #x是C类型的一个实例对象 print(x.__dict__) #实例对象的属性字典 print(x.__dict__) #实例对象的属性字典 print(C.__dict__) print(x.__class__) #输出了对象所属的类 print(C.__bases__) #C类的所有父亲类型的元素 print(C.__base__) #输出C类最近的父类 (即基类)
print(C.__mro__) #该类C类的层次结构 print(A.__subclasses__()) #该类A下的子类有哪些 (子类的列表)
还是刚才的显示该类下,子类的程序演示
总结创建子类,class 类别 (父类):
特殊属性:__dict__ :获得类对象或实例对象
——21:49回寝室——