Python之详解@classmethod & @staticmethod

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haeasringnar/article/details/79978145

@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()
阅读更多

没有更多推荐了,返回首页