面向对象的三大特征

  • 继承
  • 封装
  • 多态

继承

  • 子类可以使用父类定义的内容或者行为
  • 继承的实现
    • 父类,基类,超类,被继承的类,Base Class,Super Class

    • 子类:有继承行为的类

    • 所有类都必须有一个父类

      • 如果没有,则默认为是object的子类
      • 子类可以有多个父类
# 所有的类必须有父类
# 默认是object
class Pesron1():
pass
class Pesron2(object);
pass
class Person():
name = "NoName"
age = 0 # 父类写在类定义的时候的括号里
class Teacher(Person):
pass t = Teacher()
print(t.name)
NoName
class Bird():
fly = "Yes, we can"
def flying(self):
print("飞呀飞呀") class BirdMan(Person,Bird):
pass bm = BirdMan()
bm.flying()
print(bm.name)
飞呀飞呀
NoName

issubclass监测两个类的父子关系

  • 可以用来检测两个类的父子关系
# 利用刚才定义的BIrd,BirdMan,Person,Teacher,检测父子关系

print(issubclass(BirdMan,Bird))
print(issubclass(BirdMan,Person))
print(issubclass(BirdMan,Teacher))
True
True
False
help(issubclass)
Help on built-in function issubclass in module builtins:

issubclass(cls, class_or_tuple, /)
Return whether 'cls' is a derived from another class or is the same class. A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
or ...`` etc.

构造函数

  • 在函数实例化的时候调用的一个函数
  • 自动调用
  • 要求,第一个参数必须有,一般推荐self
  • 构造函数的调用时间:一般认为在实例化的时候第一个被调用
  • 一般速手动调用,实例化的时候调用,参数需要写入类名称后面的括号中
class Bird():
def __init__(self):
print("我被调用了") # 此时被调用构造函数,实例化
b = Bird()
我被调用了
# 构造函数2

class Person():
def __init__(self,name,age):
print(name,age) p = Person("yege",19)
yege 19

构造函数的继承

  • 构造函数默认继承,子类如果没有构造函数,则自动调用父类的构造函数
  • 一旦子类定义了构造函数,则不再自动调用父类构造函数
# 构造函数默认继承

class Person():
def __init__(self, name, age):
print("Person=({}, {})".format(name,age)) class Teacher(Person):
pass t = Teacher("yege",10)
t = Teacher()
Person=(yege, 10)

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-30-ac1b55e3c513> in <module>()
9
10 t = Teacher("yege",10)
---> 11 t = Teacher() TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'

Python OOP之继承封装多态的更多相关文章

  1. OOP面向对象 三大特征 继承封装多态

    OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...

  2. Python 面向对象编程 继承 和多态

    Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...

  3. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  4. Python 中的继承、多态和封装

    涉及问题: Python 中如何实现多继承,会有什么问题? Python 中的多态与静态方法有什么区别? 答案要点如下: Python 中的继承,就是在定义类时,在括号中声明父类,简单示例如下: cl ...

  5. Python面向对象:继承和多态

    继承与多态简介: 继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写. 动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的. ...

  6. python类的继承和多态

    现在属于是老年人的脑子,东西写着写着就忘了,东西记着记着就不知道了.之前学C++的时候就把类.对象这块弄得乱七八糟,现在是因为很想玩python,所以就看看python的类和对象. 就像说的,类有三个 ...

  7. python入门18 继承和多态

    继承:子类继承父类的属性和方法  class 子类名(父类1,父类2) 多态:子类重写父类的方法 判断对象是否是某个类的实例:  isinstance(object,class) 父类-汽车类 #co ...

  8. python之面向对象性封装,多态,以及鸭子类型

    默认类型 class A: class_name = 'python23期' def __init__(self, name, age): self.name = name self.age =age ...

  9. Python 面向对象编程——继承和多态

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

  10. python 面向对象(三)--继承和多态

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

随机推荐

  1. sql server数据库的带返回值的存储和函数的基础使用

    准备基本的数据 create table test_table ( id int identity(0,1), name varchar(20), age int, book_name varchar ...

  2. C语言基础题 22年5月

    (十六进制 %x  20.0f是%f  long 是%ld  unsigned int %#o  ) 编程题: 整数浮点数的上溢下溢 strcpy函数代码 int search(char *s, ch ...

  3. OSI七层模型、TCP协议

    1. 网络资产搜索引擎 2. 网站存储用户密码进行MD5加密 3. 小型Web管理系统账号密码使用base64进行加密 4. IP地址:网络位+主机位 5. 局域网中没有DHCP服务主机获取的地址范围 ...

  4. 在创建maven项目时提示找不到插件 'org.springframework.boot:spring-boot-maven-plugin:'

    因为是版本号缺失,不过我idea自建项目没这个问题,但是从springboot官网上创建下载就出现了这个问题. 找到文件夹的打开pom.xml文件 然后找到下图位置添加版本号,我的是2.6.1 添加完 ...

  5. 通用图像分割任务- 使用 Mask2Former 和 OneFormer

    本文介绍两个领先的图像分割神经网络模型: Mask2Former 和 OneFormer.相关模型已经在 Transformers 提供. Transformers 是一个开源库,提供了很多便捷的先进 ...

  6. 👋 和我一起学【Three.js】「初级篇」:0. 总论

    「和我一起学 XXX」是我 2023 年的一个新企划,目的是向读者(也包括未来的自己)介绍我正在学习的某项新技术.文章会通过长期反复迭代的方式保持其内容的新鲜度.文章有较大内容更新时,会在文章开头进行 ...

  7. Python学习笔记--PySpark的相关基础学习(一)

    PySpark包的下载 下载PySpark第三方包: 构建PySpark的执行环境入口对象 PySpark的编程模型 数据输入 对于SparkContext对象里面的成员方法parallelize,支 ...

  8. MySQL学习(九)frm与ibd了解

    参考:https://cloud.tencent.com/developer/article/1533746 InnoDB: frm,ibd MyISAM: frm,myd,myi ibd是InnoD ...

  9. Linux & 标准C语言学习 <DAY9_1>

        2.函数传参:         1.函数中定义的变量属于该函数,出了该函数就不能再被别的函数直接使用         2.实参与形参之间是以赋值的方式进行传递数据的,并且是单项值传递     ...

  10. 思必驰周强:AI 和传统信号技术在实时音频通话中的应用

    如何用 AI 解决声音传输&处理中的三大问题?三大问题又是哪三大问题? 在「RTE2022 实时互联网大会」中,思必驰研发总监 @周强以<AI 和传统信号技术在实时音频通话中的应用> ...