鱼C论坛

 找回密码
 立即注册
查看: 724|回复: 8

[已解决]小甲鱼40课习题

[复制链接]
发表于 2020-4-19 20:54:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

c=CodeB()
c.foo()

疑问:方法foo(cls)中形参cls用来输入什么的,实际调用的时候没有输入参数啊,参数cls有什么作用?
最佳答案
2020-4-20 23:04:01
daisanosng 发表于 2020-4-20 16:12
也就是cls代表实例化的实例对象c,换成self也一样?

不是
前面有@classmethod修饰的是类方法,第一个传入类(cls)
没有修饰的是实例方法,第一个传入实例(self)
具体内容推荐去csdn上找找,那里很多干货
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-19 20:55:27 | 显示全部楼层
cls 就是 CodeB 类本身,调用时 Python 自动传递的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 09:23:47 | 显示全部楼层
- 小甲鱼讲的python关于面向对象那一部分好好看。
- Python中不论你调用任何类型的方法
- 都需要写成object.fac()就时你写的c.foo()
- 第一个参数需要传入的是这个实例化的类本身
- 在你实例化并且调用类中的方法时自动传入
- 看完小甲鱼讲的魔法方法你就懂了这是怎么实现的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

也就是cls代表实例化的实例对象c,换成self也一样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 16:18:43 | 显示全部楼层
daisanosng 发表于 2020-4-20 16:12
也就是cls代表实例化的实例对象c,换成self也一样?

换成什么都一样,习惯写成self,只要在你定义的类中统一就行。
面向对象编程一开始有点难理解,慢慢你就觉得真TM好用!还好看!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 22:48:40 | 显示全部楼层
@classmethod后定义的一个方法叫做类方法
类方法的第一个参数是python自己传入的,传入的就是这个类
通常把类方法的第一个参数写成cls(也可以写成别的,但是最好是cls)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-20 23:04:01 | 显示全部楼层    本楼为最佳答案   
daisanosng 发表于 2020-4-20 16:12
也就是cls代表实例化的实例对象c,换成self也一样?

不是
前面有@classmethod修饰的是类方法,第一个传入类(cls)
没有修饰的是实例方法,第一个传入实例(self)
具体内容推荐去csdn上找找,那里很多干货
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-21 11:55:51 | 显示全部楼层
_荟桐_ 发表于 2020-4-20 23:04
不是
前面有@classmethod修饰的是类方法,第一个传入类(cls)
没有修饰的是实例方法,第一个传入实例 ...

大佬,概念我是这么理解的,类=属性+方法,属性分为类属性+实例属性,方法分为类方法+实例方法,类方法和类属性可以用实例名访问。反过来,实例方法和实例属性不可以用类名访问。对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-21 12:42:40 | 显示全部楼层
daisanosng 发表于 2020-4-21 11:55
大佬,概念我是这么理解的,类=属性+方法,属性分为类属性+实例属性,方法分为类方法+实例方法,类方法和 ...

基本是对的
除了实例方法和类方法,还有一个静态方法,用@staticmethod修饰
不用传入类似self,cls这样的参数
可以看看这篇文章:
https://zhuanlan.zhihu.com/p/28010894
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 18:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表