前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >类与对象,类的继承,类的派生,类的组合,多态

类与对象,类的继承,类的派生,类的组合,多态

作者头像
小小咸鱼YwY
发布于 2019-07-24 07:55:49
发布于 2019-07-24 07:55:49
1.2K00
代码可运行
举报
文章被收录于专栏:python-爬虫python-爬虫
运行总次数:0
代码可运行

面向对象编程

1.类与对象

python中先有类再有对象,类和对象,你可以看成,类是把对象的相同特征和相同方法汇总再一起,再根据类来生成对象,这个对象具有类的特征与方法

1.类的命名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class 类名:#这里类名必须用驼峰体进行命名有些特殊情况除外
    name = a #特征
    def __init__(self): self #对于生成的对象来说是生成的对象,对于类来说是个要传的形参,且__init__在运行类的时候他会调用函数
        pass
    def func():#func为方法.其在命名对象时候不会进行调用
        pass
类的调用
对象 = 类名()

2.对象的查找顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#先查找对象他本身,如果没有,再去类里面找,如果还没有就报错
#一.自身有类也有
class a:
    name = 'sb'
    def __init__(self,name):
        self.name = name
        
b = a('2b')
print(b.name)
#结果是2b
#自己没有类有
class a:
    name = 'sb'
    def __init__(self,name):
        self.xx = name
b = a('2b')
print(b.name)
#结果是sb        

3.生成好后的对象进行值修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.把对于的值取出来再进行赋值修改,或者直接生成一个同名的对象把原来的覆盖掉

2.类的继承

1.父类,子类

继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类

2.继承写法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class fu:
    print('from fu')
class son(fu): #命名中()内的内容则是这个类的其相对的父类,不进行处理默认传无参的父类
    pass
a = son()
print(a)
#from fu

3.查找顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#先查找对象他本身,如果没有,再去类里面找,如果还没就去父类的本身找,在去父类的类中找,以此类推.直到没有会报错
#菱形继承除外

3.类的派生

在父类和子类的基础上,子类再父类的基础上需要有更多的特征的时候这时候我们引入的派生

1.只有一个父类的时候

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class fu:
    def __init__(self,name,age,money):
        self.name = name
        self.age = age
        self.money = money

#在他子类我们要加个车选项
#第一种写法
class son(fu):
    def __init__(self,name,age,money,car):
        super().__init__(name,age,money)
        self.car = car
son_1 =son(1,2,3,4)
print(son_1.car)
#第二种写法
'''
严格以来继承属性查找关系
super()会得到一个特殊的对象,该对象就是专门用来访问父类中的属性的(按照继承的关系)
super().__init__(不用为self传值)
super的完整用法是super(自己的类名,self),在python2中需要写完整,而python3中可以简写为super()
'''
class son(fu):
    def __init__(self,name,age,money,car):
        super(son,self).__init__(name,age,money)
        self.car = car
son_1 =son(1,2,3,4)
print(son_1.car)

2.有多个父类的时候

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class FuOne:
    def __init__(self,name,age):
        self.name = name
        self.age = age
class FuTwo:
    def __init__(self,money):
        self.money = money

class Son(FuOne,FuTwo): #不进行处理默认传无参的父类
    def __init__(self,name,age,money):
    # super(Son, self).__init__(naem,age)等效与FuOne.__init__(FuOne,name,age)让父类不为无参
    #super我能力有限,只能做到他取第一个父类,没法做到他取第二个父类,可能他只能取第一个父类
        FuOne.__init__(FuOne,name,age)
        FuTwo.__init__(FuTwo,money)
son = Son(1,2,3)
print(son.money)

#不做处理
class FuOne:
    print('123')
    def __init__(self,name,age):
        self.name = name
        self.age = age
class FuTwo:
    print('123')
    def __init__(self,money):
        self.money = money

class Son(FuOne,FuTwo): #不进行处理默认传无参的父类,且自动导入了第一个,需要传和第一个一样的参数个数
    pass
'''
123
123
'''

4.类的组合

主要就是通过类的方法进行组合,而且方法内传的是类名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 组合:组合在一起
# 简单的选课系统
class People:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def eat(self):
        print(f'{self.name}开始吃了')


class Student(People):
    def __init__(self, student_id, name, gender):
        self.student_id = student_id
        super(Student, self).__init__(name, gender)

    def choose_course(self, course):  # python对象
        self.course = course  # 组合  # 把对象当作变量值来用,当作形参/实参/返回值。
        print(f'{self.name}选课{course.name}成功')


class Teacher(People):
    def __init__(self, level, name, gender):
        self.level = level
        super(Teacher, self).__init__(name, gender)

    def scored(self, student, course, score):
        print(f'老师{self.name}给{student.name}课程{course.name}打分{score}')


class Course:
    def __init__(self, name, price):
        self.name = name
        self.price = price


class Admin(People):
    def create_course(self, name, price):
        course = Course(name, price)
        print(f'管理员{self.name}创建了课程{name}')
        return course


# 课程
# python = Course('Python', '8888')
# linux = Course('Linux', '6666')

# 学生
zhubajie = Student('01', 'zhubajie', 'male')
sunwukong = Student('02', 'sunwukong', 'male')

# 老师
nick = Teacher('1', 'nick', 'male')
tank = Teacher('2', 'tank', 'female')

# 管理员
egon = Admin('egon', 'male')

# 业务逻辑

# 1. 创建课程
python = egon.create_course('python', '8888')
print(python.__dict__)
linux = egon.create_course('linux', '6666')
print(linux.__dict__)

# 2. 学生选择课程
zhubajie.choose_course(python)


# 3. 老师给学生打分
nick.scored(zhubajie,python,'0')

5.多态

1.定义

多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)

  1. 序列数据类型有多种形态:字符串,列表,元组
  2. 动物有多种形态:人,狗,猪

2.使用示范

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import abc


class Animal(metaclass=abc.ABCMeta):  # 同一类事物:动物
    @abc.abstractmethod  # 上述代码子类是约定俗称的实现这个方法,加上@abc.abstractmethod装饰器后严格控制子类必须实现这个方法
    def talk(self):
        raise AttributeError('子类必须实现这个方法')


class People(Animal):  # 动物的形态之一:人
    def talk(self):
        print('say hello')


class Dog(Animal):  # 动物的形态之二:狗
    def talk(self):
        print('say wangwang')


class Pig(Animal):  # 动物的形态之三:猪
    def talk(self):
        print('say aoao')


peo2 = People()
pig2 = Pig()
d2 = Dog()

peo2.talk()
pig2.talk()
d2.talk()

3.注意事项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
注意:多态与多态性是两种概念

多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python 多态、组合、反射
上述例子,只要是动物就可以直接使用相同的方法!多态的存在其实也限制了子类的使用方法(抽象类也是可以限制子类),定义子类的时候,必须有speak()方法,这样才能算的上动物类,所以python推荐使用“鸭子类型”,是一种不依赖于继承,也可以实现不考虑对象类型而使用对象。
HammerZe
2022/03/25
6220
python 多态、组合、反射
python面向对象之继承与派生
python到底是如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表,例如
菲宇
2019/06/13
5190
python面向对象之继承与派生
Python Day7
是一种新建类的方式,新建的类称为子类,子类会遗传父亲的属性,可以减少代码冗余 在python当中,子类(派生类)可以继承一个或多个父类(基类,超类)
py3study
2020/01/13
4100
面向对象-继承与多态
Mixin编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是有类的继承机制就可以实现,然而这与传统的类继承有所不同。通常mixin并不作为任何类的基类,也不关心与什么类一起使用,而是在运行时动态的同其他零散的类一起组合使用
星哥玩云
2022/09/08
3940
面向对象-继承与多态
Python入门之面向对象之类继承与派生
本章内容     一、继承     二、抽象类     三、继承的实现原理 ======================================================= 一、继承 1. 继承的定义     继承是一种新建类的方式,新建的类被称为子类,子类会继承父类的属性。     在Python中支持,一个子类(派生类——可以继承一个或者多个父类(基类或者超类) 2. 为什么要用继承 继承可以有效减少代码冗余   3. 如何使用继承     继承代码示例 # 继承示例 class F
Jetpropelledsnake21
2018/05/02
9330
Python入门之面向对象之类继承与派生
Python之面向对象三
面向对象的三大特性: 多态 多态指的是一类事物有多种形态。Python3天生支持多态。 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') c
新人小试
2018/04/12
8260
Python之面向对象三
一文理清面向对象(封装、继承、多态)+ 实战案例
面向过程其实就是把过程当做设计核心,根据问题的发展顺序,依次解决问题,尽可能的把过程中涉及到的问题完善解决。他有他的优点,当拿到一个问题时,可以方便的按执行的步骤写代码,但是当逻辑关系变得复杂时,有一个地方出现差错就会导致整个程序无从下手。
程序员小猿
2021/01/19
5110
一文理清面向对象(封装、继承、多态)+ 实战案例
对Python继承和多态的理解
在生活中,大家都应该听过这个词,比如儿子继承他老子的财产,那么在python中也有继承,但是有不少人比较难理解继承这个东西。 在python,所有的类都默认继承object类,因此object类也被称为基类,其他的类称为派生类,在python中继承就是 子类可以继承父类中的所有的非私有方法
A_snail
2023/05/09
2700
python3:面向对象(多态和继承、方
以上就是在面向对象中,多态、继承以及方法重载三大部分的知识点。学python也有一个礼拜之久了,深深地感受到这门语言的简洁美妙之处。操作起来非常的方便,也易于记忆。对我像我这样,从刚开始的C语言到后来面向对象C++、Java等,都不及这门python来的简单,就拿变量定义来说,之前学的都需要定义变量的类型,而现代化语言python不需要,可以说让我非常喜欢了!!
py3study
2020/01/09
3580
python3:面向对象(多态和继承、方
Python 基础 类的继承
如果寂静定义了Person类,需要定义新的Student 和Teacher 类时     可以直接从Person 中继承     class Person(Object):       def __init__(self,name,gender):         self.name = name         self.gender = gender     定义 Student 类时,只需要把额外的属性加上,例如:score         class Student(Person):        
用户1197315
2018/04/03
1.2K0
软件测试|Python基础之面向对象(四)
super()是一个特殊的类,在子类 init 内调用super得到一个对象,该对象指向父类的名称空间
霍格沃兹测试开发Muller老师
2023/02/07
3390
第26天面向对象编程之组合,多态,封装
问题一: 既然是选课,肯定是要有课程的,因此我们需要为每个学生的特征上面重新添加上一些课程信息,包括的有课程名,课程时长,课程价格。因此出现了下面的修改的代码。
py3study
2020/01/20
3310
面向对象的三大特性(封装、继承、多态)
继承 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass pass class SubClass2
用户1214487
2018/01/23
4.2K0
面向对象的三大特性(封装、继承、多态)
python 面向对象之类的继承
AttributeError: 'WoMan' object has no attribute 'go_to_work'
py3study
2018/08/02
2390
面向对象三大特性
在整个面向对象的过程中有以上的三个特性,一下子不可能都了解完,今天先来了解一下其中的继承特性
全栈程序员站长
2022/07/21
6390
面向对象三大特性
8.python面向对象编程
基本概念 Class 类 一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法 Object 对象 一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同 Encapsulation 封装 在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据
zhang_derek
2018/04/11
6490
8.python面向对象编程
python3--类的组合,初始类的继承
圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长
py3study
2018/08/02
7640
面向对象的三大特性
继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 1 class ParentClass1: #定义父类 2 pass 3 4 class ParentClass2: #定义父类 5 pass 6 7 class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass 8 pas
人生不如戏
2018/04/12
6730
组合、封装、多态
继承:一种类与类的关系,一种什么是什么的关系,子类是父类的从属关系。 组合:对象与对象的关系,一种什么有什么的关系,一个对象拥有另一个对象。 组合优点:让类与类之间解耦,可扩展性高 组合的缺点:编写复杂度高 继承优点:编写复杂度低 继承缺点:耦合度高
GH
2019/12/12
5700
Python25 面向对象
你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢?
py3study
2020/01/09
5420
相关推荐
python 多态、组合、反射
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文