
class A(object): def func(self,i): print(i)
A.func(None,1)
不用实例化也能调用该方法?这样写法对吗,合理不
1 j0hnj 2019 年 3 月 26 日 没问题。说实话你跑一下不就知道了 |
2 pythonbug 2019 年 3 月 26 日 Python 菜鸡一只, 水平很低, 说错了请各位大佬指正, 先谢过了. class A(object): def func(self, i): print(i) @classmethod def func1(cls, i): print(i) A().func(1) # 输出 1, 实例对象调用实例方法, 实例方法的 self 指向实例对象 A.func(None, 1) # 输出 1, 类对象调用实例方法 A.func1(1) # 输出 1, 类对象调用类方法 A().func1(1) # 输出 1, 实例对象调用类方法 我没见过用类对象调用实例方法的例子(应该是我见识少?), 如果要用类对象调用一个方法可以定义一个类方法, 在方法名上加 @classmethod 装饰器, 方法第一个形参一般为 cls |
3 pythonbug 2019 年 3 月 26 日 我见识少, 只是觉得用类调用实例方法有点怪, 也不知道是否有啥弊端还是怎样 |
4 HelloAmadeus 2019 年 3 月 26 日 via iPhone python 实现就是这样,实例调用方法默认把 self 传进去了,实际的执行的就是类定义的方法. |
5 ipwx 2019 年 3 月 26 日 @classmethod 是特殊 decorator,不要以常理笃之。 |
6 arischow 2019 年 3 月 26 日 via iPhone instance.method 是糖 |
7 jmc891205 2019 年 3 月 26 日 这样写法在 Python 中是合法的 但是在日常开发中是不合理的 如果一个类的某个方法和其实例无关,还是加上 classmethod 装饰器吧 |
8 yushenglin 2019 年 3 月 26 日 这样写是可以的,但是不建议使用,你还可以用类名加私有变量名对私有属性进行修改呢,这在日常工作中不太符合规范,但是能用。 |
9 Kilerd 2019 年 3 月 26 日 instance.method(parameters) equals to Class.method(instance, parameters) |
10 xpresslink 2019 年 3 月 27 日 python 有这么用的,比如自己写一个类的工厂函数。 但是最好加上 @staticmethod 装饰。就可以省去第一个位置参数了。 |