鱼C论坛

 找回密码
 立即注册
查看: 1158|回复: 2

[已解决]037类与对象疑问求解

[复制链接]
发表于 2020-8-12 16:03:41 | 显示全部楼层 |阅读模式

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

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

x
class MyClass:
    name = 'FishC'

    def myFun(self):
        print("Hello FishC!")

print(MyClass.name)
# m = MyClass()
# m.myFun()
MyClass.myFun()
这段代码就会报错,报错结果为:
TypeError: myFun() missing 1 required positional argument: 'self'
缺少一个self,可是这个self往哪加呢?怎么加入一个self才变为正确的呢?

------------------------------------------------------------------------------------------

另外一种情况:
class MyClass:
    name = 'FishC'

    def myFun(self):
        print("Hello FishC!")

print(MyClass.name)
m = MyClass()
m.myFun()
# MyClass.myFun()

这个却能运行成功,结果如下:
FishC
Hello FishC!
-----------------------------------------------------------------------------------------
求解答一下,为什么第一种情况就不可以,第二种情况就可以,正确访问方法的操作又是什么?
最佳答案
2020-8-12 16:05:45
第二种情况中,由于是通过类调用实例方法,所以要手动传入一个 MyClass 的实例,所以先创建一个MyClass 的实例 m,然后再作为参数传进去:
class MyClass:
    name = 'FishC'

    def myFun(self):
        print("Hello FishC!")

print(MyClass.name)
m = MyClass()
# m.myFun()
MyClass.myFun(m)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-12 16:05:45 | 显示全部楼层    本楼为最佳答案   
第二种情况中,由于是通过类调用实例方法,所以要手动传入一个 MyClass 的实例,所以先创建一个MyClass 的实例 m,然后再作为参数传进去:
class MyClass:
    name = 'FishC'

    def myFun(self):
        print("Hello FishC!")

print(MyClass.name)
m = MyClass()
# m.myFun()
MyClass.myFun(m)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-12 16:20:37 | 显示全部楼层
zltzlt 发表于 2020-8-12 16:05
第二种情况中,由于是通过类调用实例方法,所以要手动传入一个 MyClass 的实例,所以先创建一个MyClass 的 ...

懂了,直接通过类来访问实例是不行的,要通过创建一个实例来调用实例,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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