daisanosng 发表于 2020-4-19 20:54:22

小甲鱼40课习题

class CodeB:
    @classmethod
    def foo(cls):
      print("调用类方法 foo()")

c=CodeB()
c.foo()

疑问:方法foo(cls)中形参cls用来输入什么的,实际调用的时候没有输入参数啊,参数cls有什么作用?

zltzlt 发表于 2020-4-19 20:55:27

cls 就是 CodeB 类本身,调用时 Python 自动传递的

会计的会怎么念 发表于 2020-4-20 09:23:47

- 小甲鱼讲的python关于面向对象那一部分好好看。
- Python中不论你调用任何类型的方法
- 都需要写成object.fac()就时你写的c.foo()
- 第一个参数需要传入的是这个实例化的类本身
- 在你实例化并且调用类中的方法时自动传入
- 看完小甲鱼讲的魔法方法你就懂了这是怎么实现的

daisanosng 发表于 2020-4-20 16:12:01

会计的会怎么念 发表于 2020-4-20 09:23
- 小甲鱼讲的python关于面向对象那一部分好好看。
- Python中不论你调用任何类型的方法
- 都需要写成obje ...

也就是cls代表实例化的实例对象c,换成self也一样?

会计的会怎么念 发表于 2020-4-20 16:18:43

daisanosng 发表于 2020-4-20 16:12
也就是cls代表实例化的实例对象c,换成self也一样?

换成什么都一样,习惯写成self,只要在你定义的类中统一就行。
面向对象编程一开始有点难理解,慢慢你就觉得真TM好用!还好看!

_荟桐_ 发表于 2020-4-20 22:48:40

@classmethod后定义的一个方法叫做类方法
类方法的第一个参数是python自己传入的,传入的就是这个类
通常把类方法的第一个参数写成cls(也可以写成别的,但是最好是cls)

_荟桐_ 发表于 2020-4-20 23:04:01

daisanosng 发表于 2020-4-20 16:12
也就是cls代表实例化的实例对象c,换成self也一样?

不是
前面有@classmethod修饰的是类方法,第一个传入类(cls)
没有修饰的是实例方法,第一个传入实例(self)
具体内容推荐去csdn上找找,那里很多干货

daisanosng 发表于 2020-4-21 11:55:51

_荟桐_ 发表于 2020-4-20 23:04
不是
前面有@classmethod修饰的是类方法,第一个传入类(cls)
没有修饰的是实例方法,第一个传入实例 ...

大佬,概念我是这么理解的,类=属性+方法,属性分为类属性+实例属性,方法分为类方法+实例方法,类方法和类属性可以用实例名访问。反过来,实例方法和实例属性不可以用类名访问。对吗?

_荟桐_ 发表于 2020-4-21 12:42:40

daisanosng 发表于 2020-4-21 11:55
大佬,概念我是这么理解的,类=属性+方法,属性分为类属性+实例属性,方法分为类方法+实例方法,类方法和 ...

基本是对的
除了实例方法和类方法,还有一个静态方法,用@staticmethod修饰
不用传入类似self,cls这样的参数
可以看看这篇文章:
https://zhuanlan.zhihu.com/p/28010894
页: [1]
查看完整版本: 小甲鱼40课习题