网站首页 > 文章中心 > 其它

python构造函数继承_python多级继承C可以调用A的构造函数吗

作者:小编 更新时间:2023-09-02 10:53:23 浏览量:114人看过

Python 为什么要继承 object 类

继承 object 类的是新式类,不继承 object 类的是经典类

python构造函数继承_python多级继承C可以调用A的构造函数吗-图1

low-level constructors named __new__() – 低级别的构造函数.

Note: Python 的 class __init__ 并不是其他语言意义上的构造函数,

在 new 创建实例后对实例属性初始化的函数.

descriptors, a generalized way to customize attribute access – 描述符.

或者说描述符协议支持.descriptor protocol __get__, __set__ ,__delete__ 等,

可以阅读 descriptor 文档

static methods and class methods - 静态方法和类方法

properties (computed attributes) – 属性访问 setter getter.

现在装饰器语法糖遍布各Python框架.

slots – 用户设置后可以限定实例的属性.

不因为优化内存使用率而使用 slots, 因为 __dict__ 结构内存做了优化,

python构造函数继承_python多级继承C可以调用A的构造函数吗-图2

Note: __dict__ 并不是 Python 意义上的内置的 dict, 其实是一个 proxy 类.

a new Method Resolution Order (MRO) – MRO 方法解析次序改变

Python构造函数

类是对象的模板,是抽象的.

构造函数 init 是Python魔术方法之一,如图魔术方法

我们通过类模版去创建类的实例对象,然后再调用类定义的功能.

那实例对象的属性是通过什么来初始化的?

这时候Python引入来构造函数 init

构造函数,会在创建实例对象之后Python会自动执行此方法,把初始化的属性特点放到实例对象里.

通过前面的学习,我们知道一个python对象包含三个部分:id(识别码),type(对象类型),value(对象的值)

那么我们进一步深入对象包含的三部分:

我们通过类创建实例对象后,需要定义构造函数 init ()方法.

构造方法用于执行实例对象的初始化工作,即对象创建之后,初始化当前对象的相关的属性,无返回值

构造函数重点 :

我们通过栗子来学习构造函数的过程

构造函数初始化实例对象过程如下:

①Animal类会通过默认的 new ()方法为实例对象在堆内存中为开辟一个空间

敲黑板,重点来啦~

拓展:

我们今天学习了构造函数 init (),其在创建对象之后被Python自动调用初始化实例对象属性数据值,无返回值,并且构造函数不能被显示调用.

创建对象时,如果需要,构造函数可以接受参数.当创建没有构造函数的类时,Python会自动创建一个不执行任何操作的默认构造函数.

每个类必须有一个构造函数,即使它只依赖于默认构造函数

好啦,好了,全部的本期内容,欢迎大佬评论区指正~

Python面向对象编程之继承与多态详解

Python面向对象编程之继承与多态详解

本文实例讲述了Python面向对象编程之继承与多态.分享给大家供大家参考,具体如下:

Python 类的继承

在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class).

我们先来定义一个class Person,表示人,定义属性变量 name 及 sex (姓名和性别);

定义一个方法print_title():当sex是male时,print man;当sex 是female时,print woman.参考如下代码:

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

def print_title(self):

if self.sex == "male":

print("man")

elif self.sex == "female":

print("woman")

class Child(Person): # Child 继承 Person

pass

May = Child("May","female")

Peter = Person("Peter","male")

print(May.name,May.sex,Peter.name,Peter.sex) # 子类继承父类方法及属性

May.print_title()

Peter.print_title()

而我们编写 Child 类,完全可以继承 Person 类(Child 就是 Person);使用 class subclass_name(baseclass_name) 来表示继承;

python构造函数继承_python多级继承C可以调用A的构造函数吗-图3

继承有什么好处?最大的好处是子类获得了父类的全部属性及功能.如下 Child 类就可以直接使用父类的 print_title() 方法

实例化Child的时候,子类继承了父类的构造函数,就需要提供父类Person要求的两个属性变量 name 及 sex:

在继承关系中,如果一个实例的数据类型是某个子类,那它也可以被看做是父类(May 既是 Child 又是 Person).但是,反过来就不行(Peter 仅是 Person,而不是Child).

继承还可以一级一级地继承下来,就好比从爷爷到爸爸、再到儿子这样的关系.而任何类,最终都可以追溯到根类object,这些继承关系看上去就像一颗倒着的树.比如如下的继承树:

isinstance() 及 issubclass()

Python 与其他语言不同点在于,当我们定义一个 class 的时候,我们实际上就定义了一种数据类型.我们定义的数据类型和Python自带的数据类型,比如str、list、dict没什么两样.

Python 有两个判断继承的函数:isinstance() 用于检查实例类型;issubclass() 用于检查类继承.参见下方示例:

class Child(Person): # Child 继承 Person

May = Child()

Peter = Person()

print(isinstance(May,Child)) # True

print(isinstance(May,Person)) # True

print(isinstance(Peter,Child)) # False

print(isinstance(Peter,Person)) # True

print(issubclass(Child,Person)) # True

Python 类的多态

在说明多态是什么之前,我们在 Child 类中重写 print_title() 方法:若为male,print boy;若为female,print girl

class Child(Person): # Child 继承 Person

print("boy")

print("girl")

print(May.name,May.sex,Peter.name,Peter.sex)

当子类和父类都存在相同的 print_title()方法时,子类的 print_title() 覆盖了父类的 print_title(),在代码运行时,会调用子类的 print_title()

这样,我们就获得了继承的另一个好处:多态.

多态的好处就是,当我们需要传入更多的子类,例如新增 Teenagers、Grownups 等时,我们只需要继承 Person 类型就可以了,而print_title()方法既可以直不重写(即使用Person的),也可以重写一个特有的.这就是多态的意思.调用方只管调用,不管细节,而当我们新增一种Person的子类时,只要确保新方法编写正确,而不用管原来的代码.这就是著名的"开闭"原则:

对修改封闭(Closed for modification):不重写,直接继承父类方法函数

子类重写构造函数

子类可以没有构造函数,表示同父类构造一致;子类也可重写构造函数;现在,我们需要在子类 Child 中新增两个属性变量:mother 和 father,我们可以构造如下(建议子类调用父类的构造方法,参见后续代码):

def __init__(self,name,sex,mother,father):

self.mother = mother

self.father = father

May = Child("May","female","April","June")

print(May.name,May.sex,May.mother,May.father)

class Child(Person): # Child 继承 Person

Person.__init__(self,name,sex) # 子类对父类的构造方法的调用

多重继承

多重继承的概念应该比较好理解,比如现在需要新建一个类 baby 继承 Child , 可继承父类及父类上层类的属性及方法,优先使用层类近的方法,代码参考如下:

class Child(Person):

class Baby(Child):

May = Baby("May","female") # 继承上上层父类的属性

print(May.name,May.sex)

May.print_title() # 可使用上上层父类的方法

May = Baby("May","female")

May.print_title() # 优先使用上层类的方法

以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章