Python自身在类中被忽略

Python自身在类中被忽略,python,class,self,Python,Class,Self,我正在使用“学习python 3的图解指南”来学习python。第二十一章是关于课程的。在本章中,它不正确地使用了“self”?我试着为一个示例编写自己的代码,但它不起作用,所以我输入了示例代码,令人惊讶的是,它也不起作用 class CorrectChair: '''blah''' max_occupants = 4 def __init__(self, id): self.id = id self.count = 0 def

我正在使用“学习python 3的图解指南”来学习python。第二十一章是关于课程的。在本章中,它不正确地使用了“self”?我试着为一个示例编写自己的代码,但它不起作用,所以我输入了示例代码,令人惊讶的是,它也不起作用

class CorrectChair:
    '''blah'''
    max_occupants = 4

    def __init__(self, id):
        self.id = id
        self.count = 0

    def load(self, number):
        new_val = self.check(self.count + number)
        self.count = new_val

    def unload(self, number):
        new_val - self._check(self.count - number)
        self.count = new_val

    def _check(self, number):
        if number < 0 or number > self.max_occupants:
             raise ValueError('Invalid count:{}'.format(number))
        return number
班级矫正椅:
“废话”
最大居住人数=4人
定义初始化(self,id):
self.id=id
self.count=0
def加载(自身,编号):
新值=自检(自检计数+编号)
self.count=新值
def卸载(自身,编号):
新值-自我检查(自我计数-编号)
self.count=新值
def_检查(自身,编号):
如果人数<0或人数>self.max\u乘员:
raise VALUERROR('无效计数:{}'。格式(数字))
返回号码
它出错为:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    CorrectChair.load(1)
TypeError: load() missing 1 required positional argument: 
'number'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
修正座椅载荷(1)
TypeError:load()缺少1个必需的位置参数:
“数字”
它似乎没有认识到自己的论点。。我怎样才能解决这个问题?谷歌搜索并没有起到任何作用,我看到的每一个例子都让它看起来应该起作用


它应该将(number)添加到self.count,而忽略其自身引用,并请求第二个参数。

必须创建一个实例并调用其上的方法:

校正椅。加载(1)
替换为:

c_chair = CorrectChair(some_id)
c_chair.load(1)

load
函数实际上是一个对象方法。在Python世界中,对象方法的第一个参数始终指向实例,实例将在调用之前隐式传递给方法。要调用对象方法,首先需要创建一个对象,然后通过点语法调用该方法。自

e、 g

如果您试图编写类方法,则必须添加
@classmethod
装饰器

class CorrectChair:
    # Blah...
    @classmethod
    def load(cls, num):
        # do something
        return
class CorrectChair:
    # Blah...
    @staticmethod
    def load(cls, num):
        # do something
        return
如果您试图编写一个静态函数,那么应该使用
@staticmethod
decorator装饰该方法

class CorrectChair:
    # Blah...
    @classmethod
    def load(cls, num):
        # do something
        return
class CorrectChair:
    # Blah...
    @staticmethod
    def load(cls, num):
        # do something
        return

错误显示您试图直接从类调用方法, 而该方法也需要一个对象引用。 在调用任何包含“self”的方法之前,需要先创建该类的实例

在您的情况下,代码应为:

correct_chair = CorrectChair(id)
correct_chair.load(1)
与类中的方法相比- 正确的椅子对应于self,1对应于方法中的“number”

def load(self, number):
    new_val = self.check(self.count + number)
    self.count = new_val

您没有实例化您的类。您似乎在这样做->
CorrectChair.load(1)
,而实际上您想做类似于
CorrectChair(1.load)(1)
。注意
CorrectChair
后面的括号,我建议首先将实例保存在变量中,然后进行调用->
correct\u chair=CorrectChair(1)
。然后您可以进行实例方法调用->
correct\u chair.load(1)
就是这样。加上其他的错误。但那正是我想要的,谢谢!