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+Pandas 获取数据库并加入DataFrame的实例

    Python+Pandas 获取数据库并加入DataFrame的实例

    今天小编就为大家分享一篇Python+Pandas 获取数据库并加入DataFrame的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python 修改CSV文件实例详解

    Python 修改CSV文件实例详解

    这篇文章主要为大家介绍了Python 修改CSV文件实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Python参数传递实现过程及原理详解

    Python参数传递实现过程及原理详解

    这篇文章主要介绍了Python参数传递实现过程及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 简析Python的闭包和装饰器

    简析Python的闭包和装饰器

    这篇文章主要为大家详细介绍了Python的闭包和装饰器,何为闭包?何为装饰器?感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 解决Tensorflow 内存泄露问题

    解决Tensorflow 内存泄露问题

    今天小编就为大家分享一篇解决Tensorflow 内存泄露问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python Pandas 对列/行进行选择,增加,删除操作

    Python Pandas 对列/行进行选择,增加,删除操作

    这篇文章主要介绍了Python Pandas 对列/行进行选择,增加,删除操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • python实现简单日期工具类

    python实现简单日期工具类

    这篇文章主要为大家详细介绍了python实现简单日期工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • python简单利用字典破解zip文件口令

    python简单利用字典破解zip文件口令

    这篇文章主要给大家介绍了关于python简单利用字典破解zip文件口令的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python自动化测试selenium操作checkbox和radiobox技术

    python自动化测试selenium操作checkbox和radiobox技术

    这篇文章主要为大家介绍了python自动化测试selenium核心技术操作checkbox和radiobox的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Python 字典详解

    Python 字典详解

    这篇文章主要介绍了Python的字典,结合实例形式详细分析了Python字典的概念、创建、格式化及常用操作方法与相关注意事项,需要的朋友可以参考下
    2021-10-10

最新评论