这和静态方法有什么区别呢?

来源:4-14 本章小结

木鸟

2019-03-18


class A:
…     def abc():
…             print(“hi”)

A.abc()
hi

好像加不加@staticmethod都能达到目的啊。   我原本以为没有传入self实例会报错,然而并没有。。。

我把示例中的代码
    #@staticmethod
    def valid_str(date_str):
        year, month, day = tuple(date_str.split("-"))
        if int(year)>0 and (int(month) >0 and int(month)<=12) and="">0 and int(day)<=31):
            return True
        else:
            return False
装饰器也注释掉了,运行完好

写回答

3回答

weixin_慕少2488111

2020-05-18

没有错是因为你用了A.abc()的方式去呼叫他
此时解释器是取得了A类的abc类变量,然后再对abc变量执行__call__魔法函数

如果你用

a = A()
a.abc()

的方式去调用

就会报错了





0
0

Demin

2020-02-16

我也好奇为什么会这样?是不是把abc()当成类似类变量了?

0
1
bobby
是的,没有加static就会变成类变量,所以直接通过类也能直接访问
2020-02-17
共1条回复

bobby

2019-03-18

你这里代码能格式化一下吗?没有格式化的代码看起来不清楚 //img.mukewang.com/szimg/5c8f5fc8000154dd02540260.jpg 通过这里格式化

0
2
bobby
回复
木鸟
你加我qq 442421039 我看看
2019-04-01
共2条回复

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程