Python中类变量的使用
我试图学习python类,我试图学习类变量是如何工作的。当我执行下面的代码时,我看到了这个错误。我只是想理解为什么python会抱怨“Employee”这个名字。当我在Python中类变量的使用,python,oop,Python,Oop,我试图学习python类,我试图学习类变量是如何工作的。当我执行下面的代码时,我看到了这个错误。我只是想理解为什么python会抱怨“Employee”这个名字。当我在\uuuu init\uuuu方法中将语句移动到Employee.employeecount=Employee.employeecount+1时,我看到它没有抱怨。有人能帮我理解到底发生了什么吗 非工作代码: class Employee(object): employeecount = 0 Employee.e
\uuuu init\uuuu
方法中将语句移动到Employee.employeecount=Employee.employeecount+1
时,我看到它没有抱怨。有人能帮我理解到底发生了什么吗
非工作代码:
class Employee(object):
employeecount = 0
Employee.employeecount = Employee.employeecount + 1
def __init__(self,name,salary):
self.name = name
self.salary = salary
def getdata(self):
self.salary += 1
print "Employee name: %s \nEmployee Salary: %d" % (self.name,self.salary)
def getname(self):
return self.name
def getsalary(self):
return self.salary
emp1 = Employee('Pradeep',8000)
emp1.getdata()
emp2 = Employee('Maddy',9000)
emp2.getdata()
print "Employee Count is %d" % Employee.employeecount
print "Employee Count is %d" % Employee.employeecount
name = emp1.getname()
salary = emp1.getsalary()
print "Name is %s and salary is %d" % (name,salary)
python classes.py
Traceback (most recent call last):
File "classes.py", line 4, in <module>
class Employee(object):
File "classes.py", line 6, in Employee
Employee.employeecount = Employee.employeecount + 1
NameError: name 'Employee' is not defined
回溯(最近一次呼叫最后一次):
文件“classes.py”,第4行,在
类别雇员(对象):
文件“classes.py”,第6行,在Employee中
Employee.employeecount=Employee.employeecount+1
NameError:未定义名称“Employee”
问题是您在类定义的右侧使用了Employee.employeecount=Employee.employeecount+1
行;这将在程序启动时执行,而不是在创建新员工时执行
此时,Employee
类将看到Employee.employeecount
并尝试查找一些已经制作的Employee
类-它不会意识到您希望它引用自身。在那个时间点,<代码>雇员< /代码>还没有被正确地定义,因为你正处于定义它的中间。另一方面,如果将其放在\uuuu init\uuuu
函数中,则不会出现问题,因为在实际创建员工时,该类已被正确定义
此时您要做的只是employeecount=employeecount+1
。这将消除错误,但这可能不是您想要做的。如果您想在每次创建新员工时添加到计数中,请将该employee.employeecount=employee.employeecount+1
行与之前一样放入\uuu init\uuu
函数中。这应该可以解决问题。您希望更改代码,以便在init
中增加计数器,以便每次实例化员工时,计数器都会增加
class Employee(object):
employeecount = 0 # Start of program this is set to 0
def __init__(self,name,salary):
self.name = name
self.salary = salary
Employee.employeecount += 1 # Add 1 each time you create an Employee
您不能在employeecount=0
下面的employeecount
前面引用employeecount
,因为您已经处于班级级别
class Employee(object):
# This is at class level - you don't use "ClassName.variableName"
# You just use "variableName"
这就是为什么employeecount=0
不会给您错误,而Employee.employeecount=Employee.employeecount+1
会给您错误
您的代码在init
中工作,因为您必须在变量名之前使用类名来访问类变量
def __init__(self,name,salary):
# This is at the instance level
# To access a class variable you have to put the class name first
当您将Employee.employeecount=Employee.employeecount+1
移动到\uuuu init\uuuuu
中时,您的意思是每次我输入新对象时,都要递增此employeecount变量。创建对象时会调用类的\uuuuu init\uuuuu
方法,这就是错误消失的原因。抛出错误的行应该做什么?非常感谢。明白了。谢谢你的快速回复。谢谢你的快速回复。知道了。