iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python classmethod和
  • 365
分享到

python classmethod和

pythonclassmethod 2023-01-31 06:01:50 365人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

   这两个装饰器是python自带的,虽然一直都知道装饰器是怎么用的,但是确实不知道何时去使用它们,今天看到某人用到了,又看了一遍,才有所收货.   其实我们几乎可以不用这两个装饰器,总有办法解决问题,所以让我定义装饰起的用途,那么就一点

   这两个装饰器是python自带的,虽然一直都知道装饰器是怎么用的,但是确实不知道何时去使用它们,今天看到某人用到了,又看了一遍,才有所收货.

   其实我们几乎可以不用这两个装饰器,总有办法解决问题,所以让我定义装饰起的用途,那么就一点,让代码变得整洁,少些代码.

   以前我一直不知道claSSMethod的用法,有它没它都是一样,举个例子

class A(object):  
    bar = 1  
    def foo(self):  
        print 'foo'  
    @classmethod  
    def class_foo(cls):  
        print 'class_foo'  
        print cls.bar  
        cls().foo()

上面代码如果添加了装饰器@classmethod 

就这样来调用:

 
A.class_foo()

如果没有装饰器就这样写

class A(object):  
    bar = 1  
    def foo(self):  
        print 'foo'   
    
    def class_foo(self):  
        print 'class_foo'  
        print bar  
        self.foo() 
a=A()
a.class_foo()

其实看起来没多大差别,甚至没有变得更优雅,仿佛不知道是不是真有什么特殊效果,其实是有的.一般会有几种情况适合使用classmethod装饰器

 1某个类实例化会实例化太多的数据,而你只用某个方法用classmethod就可以绕过去

 2当有两个类的时候,一个类只是懒得再写一遍某个方法,调用另外一个类的方法却又不想实例化,或者说只是想让代码看起来更好看

staticmethod装饰器其实比较好理解,还是先看例子,有装饰器的用法

class A(object):  
    bar = 1  
    def foo(self):  
        print 'foo'  
 
    @staticmethod  
    def static_foo():  
        print 'static_foo'  
        print A.bar   
  
A.static_foo()

相同代码没有用装饰器

class B(object):  
    bar = 1  
    def foo(self):  
        print 'foo'  
   
    def static_foo(self):  
        print 'static_foo'  
        print bar  
  
  
b=B()
b.static_foo()

看起来也没多大差别,但是a=A()是没有实例化static_foo()的,b=B()却实例化了static_foo,看起来仿佛没什么用,其实是没什么用,从代码角度来看,只是可以少实例化一些方法吧,别人都说符合oop思想,我就没多大感悟了,但是建议少用.

--结束END--

本文标题: python classmethod和

本文链接: https://www.lsjlt.com/news/190262.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python classmethod和
       这两个装饰器是Python自带的,虽然一直都知道装饰器是怎么用的,但是确实不知道何时去使用它们,今天看到某人用到了,又看了一遍,才有所收货.   其实我们几乎可以不用这两个装饰器,总有办法解决问题,所以让我定义装饰起的用途,那么就一点...
    99+
    2023-01-31
    python classmethod
  • 详解python中@classmethod和@staticmethod方法
    在python类当中,经常会遇到@classmethod和@staticmethod这两个装饰器,那么到底它们的区别和作用是啥子呢?具体来看下。 @classmethod :默认有一...
    99+
    2024-04-02
  • python @classmethod详解
    classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的cls参数, 可以来调用类的属性,类的方法,实例化对象等。 废话不多说,直接上代码1.简洁调用方式 class TestClass(...
    99+
    2023-09-13
    python 开发语言
  • @classmethod
    代码部分: class Dog(object): name="huazi" def __init__(self,name): self.name=name @classmethod def eat(s...
    99+
    2023-01-30
    classmethod
  • python中的classmethod与staticmethod
    目录1.静态方法(staticmethod)2.类方法(classmethod)为什么会出现classmethod1.静态方法(staticmethod) 静态方法: @static...
    99+
    2024-04-02
  • 怎么使用@Staticmethod、@Classmethod和@Property类装饰器
    这篇文章主要讲解了“怎么使用@Staticmethod、@Classmethod和@Property类装饰器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用@Staticmethod、...
    99+
    2023-06-15
  • Python中怎么通过@classmethod实现多态
    这篇文章主要介绍了Python中怎么通过@classmethod实现多态的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中怎么通过@classmethod实现多态文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-04
  • 如何使用Python中的@classmethod实现单例模式
    这篇文章主要介绍了如何使用Python中的@classmethod实现单例模式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。@classmethod实现单例模式:class&...
    99+
    2023-06-17
  • python3--面向对象的三大特性:封装,property,classmethod,staticmethod
    python中的封装隐藏对象的属性和实现细节,仅对外提供公共访问方式好处:1 将变化隔离2 便于使用3 提供复用性4 提高安全性封装原则1 将不需要对外提供的内容都隐藏起来2 把属性都隐藏,提供公共方法对其访问私有变量和私有方法在pytho...
    99+
    2023-01-30
    三大 面向对象 特性
  • Python 2.7 和 Python
    Python 2 发布于 2000 年年底,意味着较之先前版本,这是一种更加清晰和更具包容性的语言开发过程。而先前版本的 Python 应用的是 PEP (Python 增强协议),这种技术规范能向 Python 社区成员提供信息或描...
    99+
    2023-01-31
    Python
  • Python 2 和 Python 3
      Guido(Python之父,仁慈的独裁者)在设计 Python3 的过程中,受一篇文章 “Python warts” 的影响,决定不向后兼容,否则无法修复大多数缺陷。---摘录自《流畅的Python》   你可能从来没有听说过学 J...
    99+
    2023-01-31
    Python
  • python-__getattr__ 和
    python3完全使用了新式类,废弃了旧式类,getattribute作为新式类的一个特性有非常奇妙的作用。查看一些博客和文章后,发现想要彻底理解getattr和getattribute的区别,实际上需要理解python中属性的查找顺序、...
    99+
    2023-01-30
    python
  • 关于python和sudo python
    之前在搞ssd的时候没出问题,后来重装啦一下系统,把它拷回来,发现出了点问题,在训练或者测试的时候,需要输入:python examples/ssd/ssd_pascal.py 或者python examples/ssd/score_ss...
    99+
    2023-01-31
    python sudo
  • vim支持+python和+python
     vim(33) zz:http://jingyan.baidu.com/article/c1a3101e41c0b4de656debcb.htmlubuntu 中的 vim 从 16.04 开始支持 python3 取代了之前对 Pyth...
    99+
    2023-01-31
    vim python
  • Python实战(5)Python和Sh
    Shell使用系统tar Python使用tarfile模块,Python不开多线程的情况两者做文件打包压缩对比。 Shell代码   #!/bin/sh - # Bak_rsync_Shell.sh version  shell_dir=...
    99+
    2023-01-31
    实战 Python Sh
  • Python-JSON和pickle
    笔记:一:简介 (1)JSON (JavaScript Object Notation) 是一种轻量级(XML重量级)的数据交换格式。 是为了数据交换而定制的一种规则,它基于ECMAScript的一个子集。 (2)JSO...
    99+
    2023-01-30
    Python JSON pickle
  • python datetime和cale
    一,datetime模块datetime模块定义了下面这几个类:datetime.date:表示日期的类。常用的属性有year, month, day;datetime.time:表示时间的类。常用的属性有hour, minute, sec...
    99+
    2023-01-31
    python datetime cale
  • python write和writeli
    file.write(str)的参数是一个字符串,就是你要写入文件的内容.file.writelines(sequence)的参数是序列,比如列表,它会迭代帮你写入文件。 ...
    99+
    2023-01-31
    python write writeli
  • python sorted 和 lamb
    dict = [{'id':'4','name':'b'},{'id':'6','name':'c'},{'id':'3','name':'a'},{'id':'1','name':'g'},{'id':'8','name':'f'}]di...
    99+
    2023-01-31
    python sorted lamb
  • python isinstance和is
    一.isinstance和issubclass 1.isinstance class Animal: def eat(self): print('刚睡醒吃点儿东西') class Cat(Animal): ...
    99+
    2023-01-30
    python isinstance
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作