Python静态方法@使用,类或函数调用之带括号、不带括号

liftword3个月前 (03-25)技术文章14

20221209星期五:


1,函数加了静态 @staticmethod ,类不进行实例化,就可以进行调用函数

2,函数调用带括号,调用的是函数的执行结果;

3,函数调用不带括号,调用的是函数本身,得到的是一个对象


# class methodS:  或者  class methodS():   这里可以带括号,也可以不带括号,区别不大:
class methodS:
    y = '123'

    def __init__(self,name):
        self.y = '456'
        self.name= name
        print('init方法')
    def _name(self):
        print('_name:',self.name)

    # 使用了 @staticmethod 后,def static_method(): 括号中,不需要约定的默认参数self:
    # 且不实例化的情况下,直接访问该函数:
    # 静态方法就是  类对外部函数的封装,有助于优化代码结构,和提高程序的可读性:
    @staticmethod
    def static_method():
        print('静态方法调用')

    @staticmethod
    def withK(num):
        total = num**2
        return total

"""
类调用不带括号,就是不启动实例
加括号的 是类的实例化;
类实例化以后,变量可能被init处理,从而改变初始值;
如果函数没有加 @staticmethod ,那么 类就必须实例化,然后才能调用该函数,即
"""

'''
init方法
_name: 名字
============
静态方法调用
'''
methodS('名字')._name()
print("============")
methodS.static_method()


"""
函数不加括号:
1,不带括号时,调用的是函数本身,是整个函数体,是一个函数对象,不需要等待该函数执行完成,得到的结果是一个对象
2,带括号(参数或者无参),调用的是函数的执行结果,须等待该函数执行完成的结果
"""

a = methodS.withK(6)
print(a) # 36
b = methodS.withK
print(b) #  # 不带括号时,得到的结果是一个对象
print(b(12)) # 144

# 类实例化以后,变量可能被init处理,从而改变初始值;
print(methodS('名字').y) # 456  初始值 123 变为了 456
print(methodS.y) # 初始值 123 没变



相关文章

Python出错的或电路

def count_affected_swaps(N, A, B): # 将输入的二进制字符串转换为列表 A = list(A) B = list(B) #...

Python 中如何调用其他文件的类或函数

从程序员的角度来说,跨文件调用是为了提高代码的模块化和可重用性。想象一下,如果你的程序非常庞大,所有的代码都挤在一个文件里,那将会变得难以维护和修改。通过将不同的功能模块拆分到不同的文件中,我们可以更...

使用 5 行 Python 代码拆分或合并 PDF 文件

如果希望从大型 PDF 文件中提取特定页面或将多个 PDF 文件合并为一个文件,可以使用一些 PDF 编辑器来完成,但是你可能会发现拆分或合并功能在很多免费版 PDF 编辑工具中通常不可用。在本文中,...

Python中怎么给属性增加类型检查或合法性验证?

问题 你想给某个实例 attribute 增加除访问与修改之外的其他处理逻辑,比如类型检查或合法性验证。 解决方案 自定义某个属性的一种简单方法是将它定义为一个 property。例如,下面的代码定义...

Python将两个或多个列表合并为一个列表的列表

将两个或多个列表合并为一个列表,并根据每个输入列表中的元素的位置将其组合在一起。这个需求在实际开发过程中应该说非常常见,当然python也给我们内置了相关方法!zip(*iterables, stri...