Python自身在类中被忽略
我正在使用“学习python 3的图解指南”来学习python。第二十一章是关于课程的。在本章中,它不正确地使用了“self”?我试着为一个示例编写自己的代码,但它不起作用,所以我输入了示例代码,令人惊讶的是,它也不起作用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
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)
就是这样。加上其他的错误。但那正是我想要的,谢谢!