litengyue 发表于 2023-6-5 19:34:23

Python技术交流

不知道为啥,代码跳出个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'

sfqxx 发表于 2023-6-5 19:50:33

问题在于调用 `b = B` 时,未对类B进行实例化,因此调用函数 `hello()` 时缺少要求的实例化self参数,导致 TypeError。可以通过加上括号`()`来对类B进行实例化以修复问题。

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

               
class B(A):
    pass

# 加上括号,对类B进行实例化
b = B()
print(b.x) # 输出:520
b.hello() # 输出:你好,我是A

求最佳答案{:10_254:}

isdkz 发表于 2023-6-5 19:50:38

你在创建B类的实例时,将B类本身赋值给了b ,而不是它的实例。所以,当你试图调用hello方法时,Python无法找到需要的self参数。这是因为在 Python 中,类的方法默认需要一个实例作为第一个参数(通常命名为self ),代表调用该方法的对象本身。

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

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


上面的代码会输出:

你好,我是A


你的错误就在于将b赋值为B类本身,而不是B类的一个实例。这就导致了当你试图调用hello方法时,Python 找不到它期望的self参数。在 Python 中,类的方法默认会期望一个参数(通常被命名为self ),这个参数代表调用这个方法的实例。
页: [1]
查看完整版本: Python技术交流