Python class类@staticmethod及@classmethod区别浅析

 更新时间:2023年07月25日 16:45:46   作者:xxxxxxxx  
这篇文章主要为大家介绍了Python class类@staticmethod及@classmethod区别浅析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

入学不久之后,我就在想,对于学校的这么多人,这么多教师,这么多学生,以及其他种种事物,能否对应的做一套"系统"下来呢?

随之也跟着思考了起来。

设计

好了,最直观的映入大脑的就是三个实体:

人、教师、学生。

这三个实体分别有对应的feature属性以表示其为人/教师/学生。

由此,得到以下三个class。

class Person():
    FEATURE = 'P'    
    def __init__(self):
        pass
class Teacher(Person):
    FEATURE = 'T'
    def __init__(self):
        pass
class Student(Person):
    FEATURE = 'S'    
    def __init__(self):
        pass

然而,作为学生代表的我,绝对不允许老师混入进来充当间谍。所以,必须给学生类提供一个方法以判断是否为学生。那么,对于这个方法,仅需要从Student类去调用即可,并非一定需要实例化的对象。而且,该方法由Student所独享,Teacher并不需要判断是否为学生。由此,Student改进为以下版本。

class Student(Person):
    FEATURE = 'S'    
    def __init__(self):
        pass
    @staticmethod
    def is_student(obj):
        if obj.FEATURE == 'S':            
            return True
        else:
            return False

正在思考的时候,一位代课老师过来看到了我的大概设计,然后说,“同学啊,你介个设计呢,对于我们老师,少了点东西,作为老师,我们有分文理,文理之后还有数学...blah..blah..”。
然后我就走神了,对啊,老师还根据教学科目分文理呢,有数学老师,有音乐老师,有...

class MathTeacher(Teacher):
    TEACHING = 'MATH'
    def __init__(self):
        pass
class DrawingTeacher(Teacher):
    TEACHING = 'DRAWING'
    def __init__(self):
        pass

所以以上为代表的两个类就诞生了。至于对于文理的判断,短暂的思考之后,决定把该功能添加到Teacher类做以判断。

class Teacher(Person):
    FEATURE = 'T'
    def __init__(self):
        pass
    @classmethod
    def category(cls):
        science_cate = ['MATH']
        arts_cate = ['DRAWING', 'PAINTING']
        teaching = getattr(cls, 'TEACHING', None)
        if teaching in science_cate:
            return 'Science'
        elif teaching in arts_cate:
            return 'Arts'
        else:
            return 'Unknow'

测试

在完成以上初步构想之后,决定测试一下所写代码是否能按预期执行。

得到如下测试代码

p = Person()
t = Teacher()
s = Student()
print(Student.is_student(p))    #False
print(Student.is_student(t))    #False
print(Student.is_student(s))    #True

而对于教学分类的判断,则有以下两种情形。

判断某个教师  属于哪个教学分类

print(DrawingTeacher.category())    #Arts
print(MathTeacher.category())       #Science
print(Teacher.category())           #Unknow

判断某个教师 实例 属于哪个教学分类

teacher_wang = DrawingTeacher()
teacher_li = MathTeacher()
teacher = Teacher()
print(teacher_wang.category())    #Arts
print(teacher_li.category())      #Science
print(teacher.category())         #Unknow

以上就是Python class类@staticmethod及@classmethod区别浅析的详细内容,更多关于Python staticmethod classmethod的资料请关注脚本之家其它相关文章!

相关文章

  • python drf各类组件的用法和作用

    python drf各类组件的用法和作用

    这篇文章主要介绍了python drf各类组件的用法和作用,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2021-01-01
  • python统计字符串中指定字符出现次数的方法

    python统计字符串中指定字符出现次数的方法

    这篇文章主要介绍了python统计字符串中指定字符出现次数的方法,涉及Python中count函数的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • python政策网字体反爬实例(附完整代码)

    python政策网字体反爬实例(附完整代码)

    大家好,本篇文章主要讲的是python政策网字体反爬实例(附完整代码),感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Python入门篇之字典

    Python入门篇之字典

    在元组和列表中,都是通过编号进行元素的访问,但有的时候我们按名字进行数据甚至数据结构的访问,在python中也提供了内置的映射类型--字典。映射其实就是一组key和value以及之间的映射函数,其特点是:key的唯一性、key与value的一对多的映射。
    2014-10-10
  • 浅谈PyTorch的数据读取机制Dataloader与Dataset

    浅谈PyTorch的数据读取机制Dataloader与Dataset

    这篇文章主要介绍了浅谈PyTorch的数据读取机制Dataloader与Dataset,DataLoader的作用是构建一个可迭代的数据装载器,每次执行循环的时候,就从中读取一批Batchsize大小的样本进行训练,需要的朋友可以参考下
    2023-07-07
  • Python列表转换为Excel表格第一列的方法详解

    Python列表转换为Excel表格第一列的方法详解

    在数据处理和分析的过程中,我们经常需要将Python中的数据结构(如列表)导出到Excel表格中,本文为大家整理了Python列表转换为Excel表格第一列的几种方法,希望对大家有所帮助
    2024-11-11
  • 详解python中的Turtle函数库

    详解python中的Turtle函数库

    这篇文章主要介绍了python中的Turtle函数库,包括函数库的引用方式,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • 理解python中生成器用法

    理解python中生成器用法

    本篇文章给大家详细介绍了python中的生成器用法以及原理,有兴趣的朋友参考学习下吧。
    2017-12-12
  • python Sweetviz探索性数据可视化分析库使用特征详解

    python Sweetviz探索性数据可视化分析库使用特征详解

    这篇文章主要为大家介绍了python Sweetviz探索性数据可视化分析库特征使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Django框架orM与自定义SQL语句混合事务控制操作

    Django框架orM与自定义SQL语句混合事务控制操作

    这篇文章主要介绍了Django框架orM与自定义SQL语句混合事务控制操作,结合实例形式分析了同一个方法里面既有ORM又有自定义SQL 语句的情况下事务控制相关操作技巧,需要的朋友可以参考下
    2019-06-06

最新评论