代码之家  ›  专栏  ›  技术社区  ›  NelsonGon phoxis

如何创建python方法

  •  -2
  • NelsonGon phoxis  · 技术社区  · 7 年前

    我花了大约一个小时的时间回答了几个问题,但找不到我的代码为什么不能工作。这是密码。我试过把尸体换成 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
    
    5 回复  |  直到 7 年前
        1
  •  5
  •   Thomas Lang    7 年前

    构造函数需要命名 __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)
    
        2
  •  4
  •   Stubbs    7 年前

    您需要让init带有下划线,如下所示,为了更容易,请在代码中添加问题缩进。

    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)
    

    你会得到一个 __init__() takes 4 positional arguments but 5 were given 类型错误,因为在 Employees("Wayne",20,8,5) .

    你是不是想这么做? Employees("Wayne",20.8,5)

        3
  •  3
  •   Martin Frodl    7 年前
     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)
    

    几点说明:

    1. 调用了初始值设定项方法 __init__() 不是 _init_()
    2. 类名通常应该是一个单数名词,因为一个实例通常对应于一个(真实世界)对象
    3. 压痕问题
        4
  •  2
  •   tk78    7 年前

    我不确定我理解你的问题。但你需要一个完整的 初始化 用于实例化。那么,我猜“韦恩”是你的对象的一个实例(见下文)。

    class Employee:
        def __init__(self, name, rate, hours):
            self.name = name
            self.rate = rate
            self.hours = hours
    
    wayne = Employee("Wayne", 20, 8)
    
        5
  •  1
  •   Picachieu    7 年前

    你得到了一个 TypeError 因为 staff 正在定义 在内部 这个 _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)