Python考试题--第57道题目--修饰器@staticmethod和@classmethod的含义和区别--2022年04月12日

原创
小哥 3年前 (2022-10-29) 阅读数 10 #大杂烩

目录

一、@staticmethod和@classmethod共同点和不同点:

1,常见:

2、区别:

2.代码示例演示:

1静态变量和成员变量之间的区别:

2、@staticmethod和@classmethod实际应用:


一、@staticmethod和@classmethod共同点和不同点:

1,常见:

用于声明静态方法。

静态方法是无需实例化类即可调用的方法,相当于普通函数,格式为:类名。.方法名。

2、区别:

  • @staticmethod不需要表示对象本身。self和它自己的类cls参数,就像普通函数一样,可以定义。

  • @classmethod也不需要self参数,但第一个参数需要表示其自己的类。cls参数,避免硬编码。

类中的静态成员在静态方法中被引用,并且可以使用类名。.静态成员名称,如果类名称更改,则所有引用都需要修改类名称。

如果是用@classmethod可以使用的声明的静态方法。cls参数是指静态成员。如果类名称更改,则不需要更改。

2.代码示例演示:

1静态变量和成员变量之间的区别:

class Myclass:
    bar = 1 # 静态变量
    def __init__(self) -> None:
        self.count = 20 # count是成员变量
    def process(self): # 定义通用方法
        print(process:,self.count)

# 如何确定它是否为静态变量可以在不实例化的情况下调用。
print(Myclass.bar)
# count是需要实例化才能调用的成员变量
c = Myclass()
print(c.count)

# 输出:

# 1
# 20

2、@staticmethod和@classmethod实际应用:

class Myclass:
    bar = 1 # 静态变量
    def __init__(self) -> None:
        self.count = 20 # _count是成员变量
    def process(self): # 定义通用方法
        print(process:,self.count)
    @staticmethod
    def static_process():
        print(static_process)
        print(Myclass.bar)
    @classmethod
    def class_process(cls):
        print(class_process)
        print(cls.bar)  # 调用静态变量
        print(cls)
        cls().process() # 调用方法实例化
        print(cls().count)

Myclass.static_process()
Myclass.class_process()
Myclass.bar = 123
Myclass.static_process()

结果如下:

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除