我已经经历了一个小时左右的几个问题,但找不到为什么我的代码无法正常工作。这是代码。我尝试将正文更改为类似name.self
的形式,但它返回相同的错误。这个问题已经问过几次了,但是很遗憾,我没有找到任何解决方法。
class Employees(object):
def _init_(self,name,rate,hours):
self.name=name
self.rate=rate
self.hours=hours
staff=Employees("Wayne",20,8,5)
print(staff.name,staff.rate,staff.hours)
我收到以下错误:
NameError: name 'staff' is not defined
答案 0 :(得分:5)
该构造函数需要命名为__init__
(请注意双下划线)
此外,您的缩进在这里无法使用。我认为您想要这样的东西:
class Employees(object):
def __init__(self,name,rate,hours):
self.name=name
self.rate=rate
self.hours=hours
staff = Employees("Wayne",20,8)
print(staff.name,staff.rate,staff.hours)
答案 1 :(得分:4)
您需要使用带有下划线的init,如下所示,为了简化起见,请在问题代码中添加缩进。
value
由于class Employees(object):
def __init__(self, name, rate, hours):
self.name=name
self.rate=rate
self.hours=hours
staff = Employees("Wayne",20,8,5)
print(staff.name,staff.rate,staff.hours)
中有4个参数,因此会出现__init__() takes 4 positional arguments but 5 were given
TypeError。
对于费率,您是想做Employees("Wayne",20,8,5)
答案 2 :(得分:3)
class Employee(object):
def __init__(self, name, rate, hours):
self.name = name
self.rate = rate
self.hours = hours
staff = Employee("Wayne", 20, 8)
print(staff.name, staff.rate, staff.hours)
几句话:
__init__()
,而不是_init_()
答案 3 :(得分:2)
我不确定我是否理解你的问题。但是您需要完整的 init 进行实例化。然后,我猜“ Wayne”是您的对象的一个实例(见下文)。
class Employee:
def __init__(self, name, rate, hours):
self.name = name
self.rate = rate
self.hours = hours
wayne = Employee("Wayne", 20, 8)
答案 4 :(得分:1)
由于TypeError
是在staff
方法的内部中定义的,因此将其设为局部变量,因此得到_init_
。另外,创建新对象时不会自动调用_init_
,而是调用__init__
。最后,您给它传递了太多参数。更改为此:
class Employees(object):
def __init__(self,name,rate,hours): #Note the two underscores
self.name=name
self.rate=rate
self.hours=hours
staff = Employees("Wayne",20,8) #Now in the global scope
print(staff.name,staff.rate,staff.hours)