小甲鱼40课习题
class CodeB:@classmethod
def foo(cls):
print("调用类方法 foo()")
c=CodeB()
c.foo()
疑问:方法foo(cls)中形参cls用来输入什么的,实际调用的时候没有输入参数啊,参数cls有什么作用? cls 就是 CodeB 类本身,调用时 Python 自动传递的 - 小甲鱼讲的python关于面向对象那一部分好好看。
- Python中不论你调用任何类型的方法
- 都需要写成object.fac()就时你写的c.foo()
- 第一个参数需要传入的是这个实例化的类本身
- 在你实例化并且调用类中的方法时自动传入
- 看完小甲鱼讲的魔法方法你就懂了这是怎么实现的 会计的会怎么念 发表于 2020-4-20 09:23
- 小甲鱼讲的python关于面向对象那一部分好好看。
- Python中不论你调用任何类型的方法
- 都需要写成obje ...
也就是cls代表实例化的实例对象c,换成self也一样? daisanosng 发表于 2020-4-20 16:12
也就是cls代表实例化的实例对象c,换成self也一样?
换成什么都一样,习惯写成self,只要在你定义的类中统一就行。
面向对象编程一开始有点难理解,慢慢你就觉得真TM好用!还好看! @classmethod后定义的一个方法叫做类方法
类方法的第一个参数是python自己传入的,传入的就是这个类
通常把类方法的第一个参数写成cls(也可以写成别的,但是最好是cls) daisanosng 发表于 2020-4-20 16:12
也就是cls代表实例化的实例对象c,换成self也一样?
不是
前面有@classmethod修饰的是类方法,第一个传入类(cls)
没有修饰的是实例方法,第一个传入实例(self)
具体内容推荐去csdn上找找,那里很多干货 _荟桐_ 发表于 2020-4-20 23:04
不是
前面有@classmethod修饰的是类方法,第一个传入类(cls)
没有修饰的是实例方法,第一个传入实例 ...
大佬,概念我是这么理解的,类=属性+方法,属性分为类属性+实例属性,方法分为类方法+实例方法,类方法和类属性可以用实例名访问。反过来,实例方法和实例属性不可以用类名访问。对吗? daisanosng 发表于 2020-4-21 11:55
大佬,概念我是这么理解的,类=属性+方法,属性分为类属性+实例属性,方法分为类方法+实例方法,类方法和 ...
基本是对的
除了实例方法和类方法,还有一个静态方法,用@staticmethod修饰
不用传入类似self,cls这样的参数
可以看看这篇文章:
https://zhuanlan.zhihu.com/p/28010894
页:
[1]