前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《看漫画学python》第八天-类与对象

《看漫画学python》第八天-类与对象

作者头像
用户10002156
发布2023-08-07 13:36:01
1590
发布2023-08-07 13:36:01
举报
文章被收录于专栏:生活处处有BUG

面向对象

在真实世界的校园里有学生和老师,学生有学号、姓名、所在班级等属性(数据),还有学习、提问、吃饭和走路等动作(方法)。如果我们要开发一个校园管理系统,那么在构建软件系统时,也会有学生和老师等“类”,张同学、李同学是学生类的个体,被称为“对象”,“对象”也被称为“实例”。

image-20230527060322116

定义类

Python中的数据类型都是类,我们可以自定义类,即创建一种新的数据类型。

image-20230527060403066

创建对象

类相当于一个模板,依据这样的模板来创建对象,就是类的实例化,所以对象也被称为“实例”。

image-20230527060530815

类的成员

实例变量

image-20230527060630992

image-20230527060705360

image-20230527060946006

构造方法

类中的__init__()方法是一个非常特殊的方法,用来创建和初始化实例变量,这种方法就是“构造方法”。在定义__init__()方法时,它的第1个参数应该是self,之后的参数用来初始化实例变量。调用构造方法时不需要传入self参数。

image-20230527061045820

实例方法

实例方法与实例变量一样,都是某个实例(或对象)个体特有的方法。

image-20230527061153905

类变量

类变量是属于类的变量,不属于单个对象。

例如,有一个Account(银行账户)类,它有三个成员变量:amount(账户金额)、interest_rate (利率)和owner(账户名)。amount和owner对于每一个账户都是不同的,而interest_rate对于所有账户都是相同的。amount和owners是实例变量,interest_rate是所有账户实例共享的变量,它属于类,被称为“类变量”。

image-20230527061346520

类方法

类方法与类变量类似,属于类,不属于个体实例。在定义类方法时,它的第1个参数不是self,而是类本身。

image-20230527061540648

image-20230527061614308

封装性

私有变量

为了防止外部调用者随意存取类的内部数据(成员变量),内部数据(成员变量)会被封装为“私有变量”。外部调用者只能通过方法调用私有变量。

在默认情况下,Python中的变量是公有的,可以在类的外部访问它们。如果想让它们成为私有变量,则在变量前加上双下画线(__)即可。

image-20230527061824151

私有方法

私有方法与私有变量的封装是类似的,在方法前加上双下画线(__)就是私有方法了。

image-20230527063356477

使用属性

为了实现对象的封装,在一个类中不应该有公有的成员变量,这些成员变量应该被设计为私有的,然后通过公有的set (赋值)和get(取值)方法访问。

image-20230527063536693

image-20230527063818516

继承性

Python中的继承

在Python中声明子类继承父类,语法很简单,定义类时在类的后面使用一对小括号指定它的父类就可以了。

!](http://pic.lovelifelovedream.com/typora/image-20230527064023460.png)

image-20230527064337207

多继承

image-20230527064416676

image-20230527064427861

代码语言:javascript
复制
# coding=utf-8
class Horse:
    def __init__(self, name):
        self.name = name

    def show_info(self):
        return "horse name:%s"% self.name
    def run(self):
        print("horse running...")

class Donkey:
    def __init__(self, name):
        self.name = name
    
    def show_info(self):
        return "donkey name:%s,__name:%s"% (self.name)
    
    def roll(self):
        print("donkey rolling...")

class Mule(Horse,Donkey):
    def __init__(self, name, age):
        super().__init__(name)
        self.age = age  # inherit attributes from Horse and Donkey

m = Mule('骡子张三',7)
m.run()  # call Horse.run and Donkey.run from Mule class.
m.roll()  # call Donkey.roll from Mule class.
print(m.show_info())

打印的结果 horse running... donkey rolling... horse name:骡子张三

方法重写

如果子类的方法名与父类的方法名相同,则在这种情况下,子类的方法会重写(Override)父类的同名方法。

代码语言:javascript
复制
# coding=utf-8
class Horse:
    def __init__(self, name):
        self.name = name

    def show_info(self):
        return "horse name:%s"% self.name
    def run(self):
        print("horse running...")

class Donkey:
    def __init__(self, name):
        self.name = name
    
    def show_info(self):
        return "donkey name:%s,__name:%s"% (self.name)
    
    def roll(self):
        print("donkey rolling...")

class Mule(Horse,Donkey):
    def __init__(self, name, age):
        super().__init__(name)
        self.age = age  # inherit attributes from Horse and Donkey

    def show_info(self):
        return "重写的:name:%s,age:%s"% (self.name, self.age)
m = Mule('骡子张三',7)
m.run()  # call Horse.run and Donkey.run from Mule class.
m.roll()  # call Donkey.roll from Mule class.
print(m.show_info())

打印的结果: horse running... donkey rolling... 重写的:name:骡子张三,age:7

多态性

多态性也是面向对象重要的基本特性之一。“多态”指对象可以表现出多种形态。例如,猫、狗、鸭子都属于动物,它们有“叫”和“动”等行为,但是叫的方式不同,动的方式也不同。

继承与多态

在多个子类继承父类,并重写父类方法后,这些子类所创建的对象之间就是多态的。这些对象采用不同的方式实现父类方法。

image-20230527070104119

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生活处处有BUG 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面向对象
  • 定义类
  • 创建对象
  • 类的成员
    • 实例变量
      • 构造方法
        • 实例方法
          • 类变量
            • 类方法
            • 封装性
              • 私有变量
                • 私有方法
                  • 使用属性
                  • 继承性
                    • Python中的继承
                      • 多继承
                        • 方法重写
                        • 多态性
                          • 继承与多态
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档