python面向对象(类的继承)

一. 继承的初识

在python3中 所有的类都继承自object

class ParentClass1: pass
class ParentClass2: pass

class ChildClass(ParentClass1):pass     #单继承
class ChildClass1(ParentClass1,ParentClass2):pass     #多继承

print(ParentClass1.__base__)
print(ChildClass.__base__)       #会显示该类的一个父类
print(ChildClass1.__base__)
print(ChildClass.__bases__)
print(ChildClass1.__bases__)    #会显示该类的所有父类

二. 人狗大战

class Animal:
    def __init__(self,name,aggr,hp):
        self.name = name
        self.aggr = aggr
        self.hp = hp
    def eat(self):
        print(‘in Animal‘)

class Person(Animal):
    def __init__(self,name,sex,aggr,hp):
        self.sex = sex
        # Animal.__init__(self,name,aggr,hp)
        super().__init__(name,aggr,hp)
    def attack(self,dog):
        print(‘%s打了%s‘%(self.name,dog.name))
        dog.hp -= self.aggr
        print(dog.hp)
    def eat(self):
        print(‘in Person‘)
        # Animal.eat(self)
        # super().eat()

class Dog(Animal):
    def __init__(self,name,kind,aggr,hp):
        self.sex = kind
        # Animal.__init__(self, name, aggr, hp)
        super().__init__(name,aggr,hp)
    def bite(self, person):
        print(‘%s咬了%s‘%(self.name, person.name))
        person.hp -= self.aggr
        print(person.hp)

alex = Person(‘alex‘,‘felame‘,1,250)
hei = Dog(‘小黑‘,‘teddy‘,260,10000)

alex.attack(hei)
hei.bite(alex)
# alex.eat()
Person.eat(alex)
Animal.eat(alex)
super(Person,alex).eat()

三. 单继承

不要发生循环继承
依赖倒置原则 :
高层模块不应该依赖低层模块

class A:
    def wahaha(self):print(‘in A‘)

class B(A):
    def wahaha(self):print(‘in B‘)

class C(B):
    def wahaha(self):print(‘in C‘)

class D(C):
    def wahaha(self):print(‘in D‘)

d = D()
d.wahaha()

三. 多继承及钻石继承

python3中的所有类 都默认继承object

如果一个类 继承了object 这个类就被称为新式类
没有继承object类 就被称为经典类

深度优先 广度优先 都是一种遍历算法,把这个图中所有的项都走一遍,且不会重复

经典类 遵循 深度优先算法 且没有mro方法 python2
新式类 遵循 广度优先算法 有mro方法 py2 py3
py3 super
单继承中 super就是找父类
多继承 super寻找的轨迹是根据mro(广度优先)顺序的

class A:
    def wangwang(self):
        print(‘in A‘)
class B(A):
    def wangwang(self):
        super().wangwang()    # ‘in C ‘
        print(‘in B‘)
class C(A):
    def wangwang(self):
        print(‘in C‘)
class D(B,C):pass

d = D()
d.wangwang()

原文地址:https://www.cnblogs.com/zhuzhaoyang/p/8524905.html

时间: 2024-10-08 15:56:53

python面向对象(类的继承)的相关文章

【python】-- 类的继承(新式类/经典类)、多态

继承 之前我们说到了类的公有属性和类的私有属性,其实就是类的封装,现在准备随笔的 是继承,是面向对象的第二大特性. 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过继承创建的新类称为"子类"或"派生类",被继承的类称为"基类"."父类"或"超类",继承的过程,就是从一般到

python面向对象--类与对象

一.类与对象概念 1.面向对象的两个重要概念 1)类:共性事物的抽象,是对某一类具有共性事物的描述,是概念上的定义. 2)对象:是共性事物的一个体现,是这类事物的每个个体,或者说是类的一个实例 总结:类是对象的模板,对象是类的实例 2.类结构:里面包含属性和函数 3.数据是对象的状态-->成员变量(属性) 方法是对象的行为-->函数(方法) 二.类的语法 class Math: a = 4 #属性 b = 5 def add(self): #方法 c = self.a + self.b ret

18.Python面向对象之:继承

一:什么面向对象的继承? 比较官方的说法就是: 继承(英语:inheritance)是面向对象软件技术当中的一个概念. 如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”, 而把B称为“A的父类别”也可以称“B是A的超类”.继承可以使得子类别 具有父类别的各种属性和方法,而不需要再次编写相同的代码.在令子 类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆 盖父类别的原有属性和方法,使其获得与父类别不同的功能.另外,为子类 别追加新的属性和方法也是常见的做法. 一般

Lua面向对象----类、继承、多继承、单例的实现

(本文转载)学习之用,侵权立删! 原文地址   http://blog.csdn.net/y_23k_bug/article/details/19965877?utm_source=tuicool&utm_medium=referral lua面向对象实现: 一个类就像是一个创建对象的模具.有些面向对象语言提供了类的概念,在这些语言中每个对象都是某个特定类的实例.lua则没有类的概念,每个对象只能自定义行为和形态.不过,要在lua中模拟类也并不困难. lua中,面向对象是用元表这个机制来实现.

Python 笔记 : 类和继承

# -*- coding=  utf-8 -*- # 文件编码定义的语法规则是: coding[:=]/s*([-/w.]+) # 未指定编码将默认为 : ASCII # 同时要注意物理文件的编码也要符合本语言指定的编码 # 更多可参考: http://python.org/dev/peps/pep-0263/ class CBase: '''''资源相关类'''     # 通过CBase.__doc__ 或者类实例.__doc__ 可以输出此说明 counter = 0;    # 这是属于

python面向对象--封装,继承,多态

1.创建类 class ClassName: ''' 定义类 ''' def __init__(self,name,age):#self代表类的实例,而不是类本身 ''' 类初始化函数 :param name:姓名 :param age: 年龄 ''' self.name=name self.age=age def Class_method(self): ''' 类中的方法 :return: ''' pass 2.类实例化,创建类的对象 c_name1=ClassName('zhangsan',

python 面向对象三大特性--继承

一.什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或者多个父类,父类又可以称为基类活超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass class SubClass1(ParentClass1): #单继承,基类是ParentClass,派生类是SubClass pass class SubClass2(ParentC

面向对象 类的继承

/* 面向对象的三大特性:封装 .继承.多态 Dart中的类的继承: 1.子类使用extends关键词来继承父类 2.子类会继承父类里面可见的属性和方法 但是不会继承构造函数 3.子类能复写父类的方法 getter和setter */ class Person { String name='张三'; num age=20; void printInfo() { print("${this.name}---${this.age}"); } }class Web extends Perso

Python学习-类的继承

1 继承: 2 #python2 经典类是按深度优先来继承的,新式类是按广度优先来继承的 3 #python3 经典类和新式类都是按广度优先来继承的 4 5 6 7 #经典类:class People: 8 class People(object): #这个是新式类,多继承的时候有了改变 9 10 def __init__(self, name, age): 11 self.name =name 12 self.age = age 13 14 15 def eat(self): 16 print

Python 之 类的继承

类的继承代码 #Author Kang class Person(object): #父类 def __init__(self,name,sex): #类的初始化 self.Name = name self.Sex = sex def walking(self): #类的方法 print("%s is walking"%self.Name) class BlackPerson(Person): #子类 def __init__(self,name,sex,language): #初始化