继承:继承就是让子类去拥有父类的属性和方法
子类:继承者
父类(超类):被继承者
- 什么时候用继承:在写一个类的时候,发现这个类中的部分属性和方法另一个类都拥有,
这个时候就不用去声明这些属性和方法,直接从另外一个类中继承下来就可以
class Person:
"""人"""
def _ init _(self, name='aaa', age=0):
self.name = name
self.age = age
class Student(Person):
pass
stu1 = Student()
print(stu1.name)
实例二:可以继承哪些东西?
1.公开属性可以继承
2.私有的属性不可以继承
3.公开的对象方法可以继承(私有的不行)
4.类字段可以继承
5.类的方法和静态方法可以
总结:属性和方法除了私有的都可以继承; _ slots _不能继承的
类的继承重写
声明一个类,如果不声明其父类,那么这个类默认继承自object这个类。
object类是python中所有类直接或者间接的父类
- 重新实现从父类继承下来的方法 ---> 重写
class Aniaml(object):
def _ _init_ _(self, name):
self.name = name
def shout(self):
print('%s:嗷嗷叫' % (self.name))
def be_beat(self):
print(self.name,'在跑')
print('跑的时候嗷嗷叫')
class Dog(Aniaml):
# 重写父类的shout方法。然后通过Dog对象调用shout执行的是子类的方法
def shout(self):
print('%s:汪汪汪!'% (self.name))
# 重写父类的be_beat,保留了父类实现的功能,并且添加了新的功能
def be_beat(self):
# super()指的就是父类对象
super().be_beat()
print('奋起反抗')dog1 = Dog('大黄')
dog1.shout()
dog1.be_beat()
示例2:init方法的继承和重写
class Person:
"""人"""
def __init__(self, name='', age=0):
self.name = name
self.age = age
class Student(Person):
"""学生类"""
"""
重写init方法要注意:
1.如果需要继承父类的对象属性,就需要通过super()._ _init_ _()
去保留父类的对象属性。然后再添加新的属性
"""
def _ _init_ _(self, name='', age=0, study_id=''):
super()._ _init__(name, age)
self.study_id = study_id
设计两个类:
一个正方形类,拥有方法:求面积、求周长 拥有的属性是边长
一个长方形类,拥有方法:求面积、求周长 拥有的属性是长和宽
提示:正方形就是特殊的长方形
class Rect:
def _ _init_ _(self, length=0, width=0):
self.length = length
self.width = width
def area(self):
return self.width * self.length
def perimeter(self):
return (self.width + self.length)*2
#写一个正方形类继承了长方形(Rect)的属性
#通过添加假的私有属性_ side 使得长与宽相等
class Square(Rect):
def _ _init_ _(self, length=0, width=0, side=0):
super()._ _init_ _(length, width)
self.side = side
@property
def side(self):
return self._side
@side.setter
def side(self, side):
self.width = side
self.length = side
self._side = side
s1 = Square()
s1.side = 10
print(s1.area())
print(s1.perimeter())
网友评论