Python面向对象编程:深度认识类class

244 篇文章 54 订阅

类中的其他内置函数/属性

前文代码展示了‘__init__'函数,这个是类的内置函数,默认不写就没有执行多余操作。

在Python中类这种结构还包含了下面的一些内置函数属性:

  • __name__ 类名字
  • __dict__ 类的命名空间字典(这里先不做多解释,其实这个解释虽然抽象但是准确的,下面看代码就能秒懂)
  • __doc__ 类的文档说明
  • __module__ 类的文档说明
  • __bases__ 类的文档说明

看起来比较枯燥无味的样子,除了类的名字,我们看起来好像应该是类的名字(好像废话)

我们还是看一下代码感受一下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/15 11:58 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : __init__.py.py
# @Project : hello

"""
下面是一个学生类定义
"""


class student(object):
    """这里是一个学生类定义"""

    def __init__(self, name):
        self.name = name

    def get_name(self):
        return self.name

    def set_name(self, name):
        self.name = name

    def study(self):
        print(f"{self.name} : 好好学习,天天向上!")


s1 = student("学委粉丝【小白】")
print(s1)
print(s1.get_name())
print(s1.study())

print("类名:", student.__name__)
print("类文档:", student.__doc__)
print("类的命名空间:", student.__dict__)
print("类的基类:", student.__bases__)
print("类所在的模块:", student.__module__)
复制代码

下面是运行效果:

屏幕快照 2021-11-16 下午11.54.59.png

好了,我们看到类的命名空间打印出来dict字典,内放置的内容的key都是类的成员(函数,属性),这下子清楚了:Python用一个dict来说描述类的结构!(这就是学委前篇提到的一张网,它把单一的函数,数据属性,挂到这个网上,组成了类的结构)。

其他几个内置类函数非常好理解。

另一个地方是'__bases__'函数,它告诉我们student类是在‘object’这个类的基础上创建的。(确实如此!)

既然说到了base类,再谈谈类的继承

上面的bases函数返回值的解释,换一句话说:

除了object类,其他所有类默认的都是直接或者间接的继承于object类的; 也就是说,object类是所有的类的根,源头类。

A类继承于B类,那么,我们会使用下面的描述来表示它们:

A类是B类的子类
B类是A类的父类

这个就跟家族族谱一样,最顶上那个第一代元祖父,这就是类和object的关系。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/15 11:58 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : __init__.py.py
# @Project : hello

"""
下面是一个学生类定义
"""


class Programmer():
    pass


print("programmer类的命名空间:", Programmer.__dict__)
print("programmer类的命名空间:", Programmer.__bases__)


class Student(object):
    """这里是一个学生类定义"""

    def __init__(self, name):
        self.name = name

    def get_name(self):
        return self.name

    def set_name(self, name):
        self.name = name

    def study(self):
        print(f"{self.name} : 好好学习,天天向上!")


s1 = Student("学委粉丝【小白】")
print(s1)
print(s1.get_name())
print(s1.study())

print("类名:", Student.__name__)
print("类文档:", Student.__doc__)
print("类的命名空间:", Student.__dict__)
print("类的基类:", Student.__bases__)
print("类所在的模块:", Student.__module__)




class PrimarySchoolStudent(Student):
    pass


print("*" * 16)
print("PrimarySchoolStudent类的命名空间:", PrimarySchoolStudent.__dict__)
print("PrimarySchoolStudent类的基类:", PrimarySchoolStudent.__bases__)
print("PrimarySchoolStudent类所在的模块:", PrimarySchoolStudent.__module__)
PrimarySchoolStudent("主要学生").study()
复制代码

这段代码想要展示的信息很多。

首先是在前面第一段代码后多加了一个Developer类(没有写继承)。

输出我们看到他说继承object类的(所以写跟不写没有差别,这里要注意python版本,学委用的是3.8)

其次,我们看到PirimarySchoolStudent的bases函数的输出是Student,没错,继承某个类之后的base值就为该类,也就是Student

再次,继承让子类直接拥有了父类的函数和数据属性,可以直接访问拿来用。

好了,请仔细看看下面的运行结果:

屏幕快照 2021-11-17 上午12.17.35.png

总结

这次把类和对象的知识补充了一些(但是还有Python支持多继承,这跟Java是很大的区别!),有过半不是常见的,但是在写框架或者深度分析的时候,非常有用,务必过一过熟悉一下。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值