class Student:#创建student学生类
def __init__(self,age,name,number):
self.age = age
self.name = name
self.number = number
class BoyStudent:#创建男学生student学生类
def __init__(self,age,name,number):
self.age = age
self.name = name
self.number = number
class GirlStudent:#创建女的student学生类
def __init__(self,age,name,number):
self.age = age
self.name = name
self.number = number
boy = BoyStudent(10,'mike',11)#boy对象实例化
print(boy.age)#调用类的属性年龄
girl = GirlStudent(9,'mali',9)#girl对象实例化
print(girl.age)#调用类的属性年龄
stu = Student(8,'lulu',8)#stu对象实例化
print(stu.age)#调用类的属性年龄
输出打印结果
以上三个类都有一样的属性:
boystudent继承student类:
class Student:#创建学生类
def __init__(self,age,name,number):
self.age = age
self.name = name
self.number = number
def test(self):#定义方法
print(1)
class BoyStudent(Student):#Boy类继承student类
...#三个点省略定义的属性
boy = BoyStudent(10,'mike',11)#boy对象实例化
print(boy.age)#调用student类的属性年龄
boy.test()#调用student类的方法test
多态:
1.重载:子类继承父类,子类和父类的方法相同了,子类方法优先,覆盖了父类方法,
class Student:#创建学生类
def __init__(self,age,name,number):
self.age = age
self.name = name
self.number = number
def test(self):#定义方法
print(1)
class BoyStudent(Student):#Boy类继承student类
def test(self):#三个点省略定义的属性
print(2)
class GirlStudent(Student):#Boy类继承student类
def test(self):#子类定义新的方法
print(3)
boy = BoyStudent(10,'mike',11)#boy对象实例化
print(boy.age)#调用student类的属性年龄
boy.test()#调用子类student的方法test
girl = GirlStudent(11,'lele',13)#girl对象实例化
print(girl.age)#调用student类的属性年龄
girl.test()#调用子类girl的方法test
2.子类和父类的相同方法,要同时打印出来
class Student:#创建学生类
def __init__(self,age,name,number):
self.age = age
self.name = name
self.number = number
def test(self):#定义方法
print(1)
class BoyStudent(Student):#Boy类继承student类
def test(self):#三个点省略定义的属性
super().test()#super可以直接调用父类student里的test方法,打印出父类的方法结果1
print(2)
class GirlStudent(Student):#Boy类继承student类
def test(self):#子类定义新的方法
print(3)
boy = BoyStudent(10,'mike',11)#boy对象实例化
print(boy.age)#调用student类的属性年龄
boy.test()#调用子类student的方法test
girl = GirlStudent(11,'lele',13)#girl对象实例化
print(girl.age)#调用student类的属性年龄
girl.test()#调用子类girl的方法test
添加这一句super().test.就可以调用父类里的test方法了
3.子类函数继承了父类函数 ,特殊情况下,需要修改子类函数的属性,这个例子是增加了成绩属性。
class Student:#创建学生类
def __init__(self,age,name,number):
self.age = age
self.name = name
self.number = number
def test(self):#定义方法
print(1)
class BoyStudent(Student):#Boy类继承student类
def test(self):#三个点省略定义的属性
super().test()#super可以直接调用父类student里的test方法,打印出父类的方法结果1
print(2)
class GirlStudent(Student):#Boy类继承student类
def __init__(self,age,name,number,grade_800):#重新编写girl构造函数,增加一个grade_800属性
super(GirlStudent,self).__init__(age,name,number)#用super来继承父函数
self.grade_800 = grade_800
def test(self):#子类定义新的方法
print(3)
def show(self):#新方法show,输出子类的各个属性值
print(self.age)
print(self.name)
print(self.number)
print(self.grade_800)
girl = GirlStudent(11,'lele',13,'A+')#girl对象实例化
girl.test()#调用girstudent方法test
girl.show()#调用girstudent方法show
三:封装
封装了类的属性后,外部无法调用类的属性
没有封装前:
class Dog:#定义一个狗类
def __init__(self,name,age,brand):
self.name = name#定义狗的名字属性
self.age = age#定义狗的年龄属性
self.brand = brand#定义狗的种类属性
def eat(self,food):#定义eat方法
print(f'{self.name}吃{food}')
def introduce(self):#定义introduce方法
print(f'我是一只{self.brand},我叫{self.name},今年{self.age}岁')
dog1 = Dog('骨头',10,'茶杯犬')#实例化对象dog1
dog2 = Dog('杀手',5,'中华田园犬')#实例化对象dog2
print(dog1.name,dog1.age,dog1.brand)#打印出类的属性
print(dog2.name,dog2.age,dog2.brand)#打印出类的属性
#dog1.introduce()
打印结果:
dog更改为伪装后的_Dog__age后,外部又可以继续访问:
class Dog:#定义一个狗类
def __init__(self,name,age,brand):
self.name = name#定义狗的名字属性
self.__age = age#定义狗的年龄属性
self.brand = brand#定义狗的种类属性
def eat(self,food):#定义eat方法
print(f'{self.name}吃{food}')
def introduce(self):#定义introduce方法
print(f'我是一只{self.brand},我叫{self.name},今年{self._Dog__age}岁')
dog1 = Dog('骨头',10,'茶杯犬')#实例化对象dog1
dog2 = Dog('杀手',5,'中华田园犬')#实例化对象dog2
print(dog1.name,dog1._Dog__age,dog1.brand)#打印出类的属性
print(dog2.name,dog2._Dog__age,dog2.brand)#打印出类的属性
dog1.introduce()
print(dir(dog1))
显示的结果: