@staticmethod和@classmethod的用法

classonlymethodz作用:只能被类调用,不能被实例对象调用。

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

    @staticmethod
    def static_foo():
        print( 'static_foo')
        print (A.bar)

    @classmethod
    def class_foo(cls):
        print ('class_foo')
        print (cls.bar)
        cls().foo()
A.static_foo()
A.class_foo()

面向对象中的@classonlymethod 与 @classmethod的区别
如果要使用classonlymethod ,则需要先定义好一个classonlymethod 类。
首先我们需要明白无论是classonlymethod还是classmethod,本质都是一个类,而classonlymethod继承了classmethod。

class classonlymethod(classmethod):
    def __get__(self, instance, owner):
        if instance is not None:
            raise AttributeError('This method is available only on the view class .')
        return super(classonlymethod, self).__get__(instance, owner)
posted @ 2021-04-16 17:15  ty1539  阅读(60)  评论(0编辑  收藏  举报