鱼C论坛

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

[已解决]Python技术交流

[复制链接]
发表于 2023-6-5 19:34:23 | 显示全部楼层 |阅读模式

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

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

x
不知道为啥,代码跳出个TypeError,哪个大佬帮忙看一下?


class A:
        x = 520
        def hello(self):
                print("你好,我是A")

               
>>> class B(A):
        pass

>>> b = B
>>> b.x
520
>>> b.hello()
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    b.hello()
TypeError: hello() missing 1 required positional argument: 'self'
最佳答案
2023-6-5 19:50:33
问题在于调用 `b = B` 时,未对类B进行实例化,因此调用函数 `hello()` 时缺少要求的实例化self参数,导致 TypeError。可以通过加上括号`()`来对类B进行实例化以修复问题。

  1. class A:
  2.     x = 520
  3.     def hello(self):
  4.         print("你好,我是A")

  5.                
  6. class B(A):
  7.     pass

  8. # 加上括号,对类B进行实例化
  9. b = B()
  10. print(b.x) # 输出:520
  11. b.hello() # 输出:你好,我是A
复制代码


求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-5 19:50:33 | 显示全部楼层    本楼为最佳答案   
问题在于调用 `b = B` 时,未对类B进行实例化,因此调用函数 `hello()` 时缺少要求的实例化self参数,导致 TypeError。可以通过加上括号`()`来对类B进行实例化以修复问题。

  1. class A:
  2.     x = 520
  3.     def hello(self):
  4.         print("你好,我是A")

  5.                
  6. class B(A):
  7.     pass

  8. # 加上括号,对类B进行实例化
  9. b = B()
  10. print(b.x) # 输出:520
  11. b.hello() # 输出:你好,我是A
复制代码


求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-5 19:50:38 | 显示全部楼层
你在创建  B  类的实例时,将  B  类本身赋值给了  b ,而不是它的实例。所以,当你试图调用  hello  方法时,Python无法找到需要的  self  参数。这是因为在 Python 中,类的方法默认需要一个实例作为第一个参数(通常命名为  self ),代表调用该方法的对象本身。

你需要通过调用  B()  来创建一个  B  类的实例,然后在该实例上调用  hello  方法。如下所示:

  1. b = B()  # 注意这里是调用B(),而不是直接赋值B
  2. b.hello()  # 现在这行代码就不会报错了
复制代码


上面的代码会输出:

  1. 你好,我是A
复制代码


你的错误就在于将  b  赋值为  B  类本身,而不是  B  类的一个实例。这就导致了当你试图调用  hello  方法时,Python 找不到它期望的  self  参数。在 Python 中,类的方法默认会期望一个参数(通常被命名为  self ),这个参数代表调用这个方法的实例。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 19:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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