Python之详解@classmethod & @staticmethod

原创 2018年04月17日 17:38:57

@classmethod简单理解:使用了@classmethod修饰的方法是类专属的,而且是可以通过类名进行调用的。否则是不行的。

class TestClass:
    @classmethod
    def classPrint(self):
        print("class method")

    def objPrint(self):
        print("obj method")

t = TestClass()
t.objPrint()
t.classPrint() #实例可以正常使用

TestClass.classPrint()  #这个时候可以直接使用不需要传入一个实例对象

TestClass.objPrint()  #这个时候就会报错,必须传入实例对象才会正常运行 例如 TestClass.objPrint(t)

@staticmethod简单理解:就是根本不需要传入实例对象就可以执行的方法。

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

    def talk(self):
        pass
    @staticmethod  #静态方法。实现了一种接口,多种实现,可以后续对象可以重复调用这个接口
    def animal_talk(self):
        self.talk()

class Cat(Animal):
    def talk(self):  #这个称为重写父类的方法
        print('Meow')

class Dog(Animal):
    def talk(self):
        print('Woof Woof')

    @staticmethod
    def statictest():
        print('注意我这里并不需要传入self参数')


d = Dog('asd')
d.talk()

c = Cat('zxc')
c.talk()

#能不能通过一种接口,使它们都可以叫
Animal.animal_talk(c)
d.statictest()
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haeasringnar/article/details/79978145

飘逸的python - @staticmethod和@classmethod的作用与区别

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法,而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。 这有利于组织代码,把某些应该...
  • u010180339
  • u010180339
  • 2013-07-29 13:29:41
  • 60160

python中classmethod与staticmethod的差异及应用

类中三种函数的应用#!/usr/bin/env python # -*- coding: utf-8 -*-class TClassStatic(object): def __init__(s...
  • callinglove
  • callinglove
  • 2015-05-13 10:05:55
  • 4110

python中 classmethod、staticmethod和普通方法的区别

python中 classmethod、staticmethod和普通方法的区别这三种方法在类和实例中都存在,都可被调用,但调用的时候默认默认传递的参数不同。对于classmethod方法当实例调用c...
  • u010157603
  • u010157603
  • 2016-03-28 16:41:57
  • 1722

python 装饰器@staticmethod和@classmethod区别和使用

python 装饰器@staticmethod和@classmethod区别和使用
  • u010571844
  • u010571844
  • 2016-02-24 11:17:20
  • 1912

理解python:@classmethod 和@staticmethod

具体详情,请看参考链接!用途: 写与类进行交互的方法,而不是实例。 @classmethod: 使用地方: 和类进行交互,但不和其实例进行交互的函数方法 举个列子:在类外定义一个函数,来...
  • reallocing1
  • reallocing1
  • 2016-11-29 18:42:57
  • 2265

【Python笔记】装饰器语法糖(@staticmethod/@classmethod/@property)原理剖析及使用场景说明

在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classmethod或@property的语法糖。本质上,它们都是函数装饰器,只不过通常被...
  • slvher
  • slvher
  • 2015-01-07 19:31:14
  • 4468

Python 中的 classmethod 和 staticmethod 有什么具体用途?

http://www.zhihu.com/question/20021164 class Kls(object):     no_inst = 0     def __init__(...
  • ulric2004
  • ulric2004
  • 2015-06-10 15:49:01
  • 705

python3-staticmethod与classmethod

classmethod 类方法 staticmethod 静态方法
  • youngbit007
  • youngbit007
  • 2017-04-03 11:25:44
  • 1443

python classmethod,staticmethod实现

classmethod class my_classmethod(object): def __get__(self, obj, type=None): def wrapper...
  • u010066807
  • u010066807
  • 2016-05-10 21:58:36
  • 840

@staticmethod和@classmethod的用法

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。 这有利于组织代码,把某...
  • GeekLeee
  • GeekLeee
  • 2016-09-22 17:22:20
  • 3023
收藏助手
不良信息举报
您举报文章:Python之详解@classmethod & @staticmethod
举报原因:
原因补充:

(最多只允许输入30个字)