python世界-迈出第八步-class继承
程序员文章站
2022-05-24 20:50:33
...
Class 继承
'''
class init
程序中的继承:在程序中,继承描述的是多个类之间的所属关系。
如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。
那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。
面向对象三大特性:封装、继承、多态。封装的意义:
1. 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;
2. 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了;
3. 对类的属性和方法增加 访问权限控制。
私有权限:在属性名和方法名 前面 加上两个下划线 __
1. 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问;
2. 类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问;
3. 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用。
原文链接:https://blog.csdn.net/python_nice/article/details/81013267
'''
class Student(object):
'''
self代表类的实例,而非类。
self就是用于存储对象属性的集合,就算没有属性self也是必备的
self 就是 对象/实例 属性的集合,
https://blog.csdn.net/u012722531/article/details/79814632
'''
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print("%s: %s" % (self.name, self.score))
def get_grade(self):
if self.score >= 90:
return 'A'
elif self.score >= 60:
return 'B'
else:
return 'C'
student = Student('gavin', 65)
student.print_score()
model = student.get_grade()
print(model)
# 多继承 以及 重写init属性
class Animal(object):
def __init__(self, age):
self.age = age
def eat(self):
print('动物吃东西')
def run(self):
print('动物跑的快')
class CatAnimal(object):
def __init__(self):
self.age = 20
def eat(self):
print('猫类吃东西')
class Cat(Animal, CatAnimal):
'''
# 重写之后,如果发现仍然需要父类方法,则可以强制调用父类方法
# 1.父类名.父类方法()
# Animal.__init__(self)
# 2.super(子类名,self).父类方法()
# super(Cat, self).__init__()
# 3. super().父类方法()。只在 python3 可用
'''
def __init__(self, age):
self.name = 'Gavin'
super(Cat, self).__init__(age)
def catch(self):
print('猫能抓老鼠')
# 重写了父类的方法
def eat(self):
print('{}岁的猫只吃鱼'.format(self.age))
cat = Cat(10)
cat.run()
# MRO 算法,确定了查找父类方法的顺序
cat.eat()
# 强制调用了指定父类的方法,父类名.父类方法.(子类对象)
CatAnimal.eat(cat)
# print(cat.name)
print(cat.age)