pengdonghan 发表于 2022-3-9 10:30:16

关于如何实例化类的问题

第37讲第5题的代码出错原因小甲鱼说的是未实例化调用方法缺少self参数。
问题1.如何添加self参数使程序成功运行?
问题2.如何将类MyClass实例化,从而成功运行程序?

wp231957 发表于 2022-3-9 10:35:41

要发文本代码

pengdonghan 发表于 2022-3-9 11:36:29

class MyClass:
      name = 'FishC'
      def myFun(self):
                print("Hello FishC!")
               
>>> MyClass.name
'FishC'
>>> MyClass.myFun()
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
    MyClass.myFun()
TypeError: myFun() missing 1 required positional argument: 'self'
>>>

python爱好者. 发表于 2022-3-9 11:41:05

pengdonghan 发表于 2022-3-9 11:36


需要绑定才能使用啊!
得先:
myclass = MyClass()
myclass.myFun()
除非你去掉类在定义中的 self !

pengdonghan 发表于 2022-3-9 11:45:00

我试着将MyClass实例化,发现后面加括号就可以输出方法,不加括号还是会报错。
请问加括号与否,对MyClass的类型有什么影响
class MyClass:
    name = 'FishC'
    def myFun(self):
      print("Hello FishC!")

      
my = MyClass()
type(my)
<class '__main__.MyClass'>
my.myFun()
Hello FishC!
my = MyClass
type(my)
<class 'type'>
my.myFun()
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
    my.myFun()
TypeError: MyClass.myFun() missing 1 required positional argument: 'self'

python爱好者. 发表于 2022-3-9 11:55:01

pengdonghan 发表于 2022-3-9 11:45
我试着将MyClass实例化,发现后面加括号就可以输出方法,不加括号还是会报错。
请问加括号与否,对MyClass ...

加括号是指将这个类的类对象传递给 my,形成实例对象,是可调用的,
而不加括号就是指将这个类本身传递给 my,又因为有 self 绑定,所以无法调用!
你后面小甲鱼就会讲到这三个类型了:类,类对象,实例对象!

pengdonghan 发表于 2022-3-9 11:58:40

python爱好者. 发表于 2022-3-9 11:55
加括号是指将这个类的类对象传递给 my,形成实例对象,是可调用的,
而不加括号就是指将这个类本身传递 ...

感谢感谢{:5_106:}
页: [1]
查看完整版本: 关于如何实例化类的问题