Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建python方法_Python - Fatal编程技术网

如何创建python方法

如何创建python方法,python,Python,我花了一个小时左右的时间研究了几个问题,但找不到为什么我的代码不起作用。这是代码。我尝试将主体更改为类似于name.self的内容,但它返回相同的错误。这个问题已经被问了好几次,但不幸的是我没有找到任何解决办法 class Employees(object): def _init_(self,name,rate,hours): self.name=name self.rate=rate self.hours=hours st

我花了一个小时左右的时间研究了几个问题,但找不到为什么我的代码不起作用。这是代码。我尝试将主体更改为类似于
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
几句话:

  • 初始值设定项方法称为
    \uuu init\uuu()
    ,而不是
    \uinit()
  • 类名通常应该是单数名词,因为单个实例通常对应于单个(真实世界)对象
  • 缩进问题

  • 构造函数需要命名为
    \uuuu init\uuuu
    (注意双下划线) 此外,您的缩进不能在这里工作。我想你想要这样的东西:

    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)
    

    你需要在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)
    
    您将得到一个
    \uuuu init\uuuuu()接受4个位置参数,但给出了5个
    类型错误,因为您在
    员工(“Wayne”,20,8,5)
    中有4个参数


    关于费率,你是不是打算对员工(“Wayne”,20.8,5)
    我不确定我是否理解你的问题。但是您需要一个完整的init进行实例化。那么,我猜“Wayne”是您的对象的一个实例(见下文)


    您将得到一个
    TypeError
    ,因为
    staff
    是在
    \u init\u
    方法中定义的,使其成为局部变量。另外,创建新对象时不会自动调用
    \u init\u
    ,而是调用
    \u init\u
    。最后,您向it传递了太多的参数。将其更改为:

    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)
    

    构造函数需要命名为
    \uuuu init\uuuuu
    (请注意双下划线),而且
    print
    调用需要处于缩进级别,在缩进级别上实际定义了
    staff
    ,这就是错误试图告诉您的内容。如何在不使用屏幕键盘的情况下生成这些下划线?还有,压痕全弄乱了。现在,您正在
    Employee
    的构造函数中创建一个新的
    Employee
    ,这导致了一个无限递归,如果构造函数曾经被调用过(出于同样的原因,现在不是),那么这就不是特殊的“双宽度下划线”但是只有两个普通的下划线。这个字符的键盘快捷键是什么,对不起?@NelsonGon所有这些都是可以键入的,没有键盘快捷键。没错,没有快捷键。我该怎么做?对不起,我是个新手。@NelsonGon你把这两个下划线和一个特殊字符混淆了吗?只需键入其中的两个:
    \uuuu
    如另一个答案中所述,您的代码将生成一个TypeError,因为
    \uuuu init\uuuu接受4个参数,但给定5个
    好吧,我复制了OPs代码,他提供的参数太多了。我会调整它的,好的,会修好的。
    class Employee:
        def __init__(self, name, rate, hours):
            self.name = name
            self.rate = rate
            self.hours = hours
    
    wayne = Employee("Wayne", 20, 8)
    
    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)