在python中创建和调用变量

在python中创建和调用变量,python,Python,我是python新手,有一个简单的问题… 在我的项目中有一个“student”类,有一些student对象(例如100): 其中一些学生是特殊的(例如五个),现在我想为这五个特殊学生中的每一个定义三个变量z0、z1、z2: for c in self.candidate_student: z0 z1 z2 在这部分之后,我想按名称调用每个候选学生变量,如下所示: student.name.z0 student.name.z1 student.name.z2 ana =

我是python新手,有一个简单的问题… 在我的项目中有一个“student”类,有一些student对象(例如100):

其中一些学生是特殊的(例如五个),现在我想为这五个特殊学生中的每一个定义三个变量
z0、z1、z2

for c in self.candidate_student:
   z0 
   z1 
   z2
在这部分之后,我想按名称调用每个候选学生变量,如下所示:

student.name.z0
student.name.z1
student.name.z2
ana = students('Ana', ['Apple', 'Ball', 'Pen'])
ana.z[0]
ana.z[1]

有人能解释一下我是如何做到这一点的吗?

既然你想为你的特殊学生添加属性,这段代码可能会有帮助:

class students:
    def __init__(self, name, z=None):
        self.name = name
        self.z = z or []
您可以这样初始化特殊学生:

student.name.z0
student.name.z1
student.name.z2
ana = students('Ana', ['Apple', 'Ball', 'Pen'])
ana.z[0]
ana.z[1]
并按如下方式调用属性:

student.name.z0
student.name.z1
student.name.z2
ana = students('Ana', ['Apple', 'Ball', 'Pen'])
ana.z[0]
ana.z[1]

由于您希望向特殊学生添加属性,此代码可能会有所帮助:

class students:
    def __init__(self, name, z=None):
        self.name = name
        self.z = z or []
您可以这样初始化特殊学生:

student.name.z0
student.name.z1
student.name.z2
ana = students('Ana', ['Apple', 'Ball', 'Pen'])
ana.z[0]
ana.z[1]
并按如下方式调用属性:

student.name.z0
student.name.z1
student.name.z2
ana = students('Ana', ['Apple', 'Ball', 'Pen'])
ana.z[0]
ana.z[1]

如果要为每个“特殊”学生定义z0、z1和z2值,可以将它们设置为对象实例的属性。注意:您可以随时向对象添加新属性,它不必位于
\uuu init\uuu()方法中。例如,如果要创建新的“特殊学生”对象:

s = student("John Doe")
s.z0 = 7
s.z1 = 8
s.z2 = 9
现在,
s
刚刚获得了三个新属性(除了您在
\uuuu init\uuuu
中设置的
name
),您可以在设置后的任何地方像变量一样对它们进行寻址。例如,在上述步骤之后:

print (s.name) # will print "John Doe"
print (s.z2) # will print 9

注意:如果您的代码同时适用于“特殊”和“非特殊”对象,那么您应该认为特殊属性并不总是存在(因此,如果您尝试在事先未设置该属性的对象上使用
student.z0
,您将得到一个异常)。

如果您打算定义z0,z1和z2值对于每个“特殊”学生,您可以将它们设置为对象实例的属性。注意:您可以随时向对象添加新属性,它不必位于
\uuu init\uuu()方法中。例如,如果要创建新的“特殊学生”对象:

s = student("John Doe")
s.z0 = 7
s.z1 = 8
s.z2 = 9
现在,
s
刚刚获得了三个新属性(除了您在
\uuuu init\uuuu
中设置的
name
),您可以在设置后的任何地方像变量一样对它们进行寻址。例如,在上述步骤之后:

print (s.name) # will print "John Doe"
print (s.z2) # will print 9

注意:如果您的代码同时适用于“特殊”和“非特殊”对象,那么您应该认为特殊属性并不总是存在(因此,如果您尝试在事先未设置该属性的对象上使用
student.z0
,您将得到一个异常).

name
也作为一个类。这似乎是子类的一个典型应用,使用继承。这不是你的学习材料吗?这是
学生的
候选者\u学生
属性是什么?你如何识别哪些学生是“特殊的”?他们还拥有一个典型学生的所有属性吗?把
name
也变成一个类。这似乎是一个典型的子类应用,使用继承。这不是你的学习材料吗?这是
学生的
候选者\u学生
属性是什么?你如何识别哪些学生是“特殊的”?他们还具有典型学生的所有特征吗?我想这对我不起作用。假设‘Ana’是一个学生对象,我想读这样的内容:(Ana.z0+Ana.Z1)@sali,现在呢?这没有错。但是我想为特殊情况创建(z0到z2)变量jussst!我想,我现在找到了我的答案和其他评论。时间税:)我想这对我没用。假设‘Ana’是一个学生对象,我想读这样的内容:(Ana.z0+Ana.Z1)@sali,现在呢?这没有错。但是我想为特殊情况创建(z0到z2)变量jussst!我想,我现在找到了我的答案和其他评论。时间税:)太多了!现在明白了!我认为像C语言一样,需要首先定义所有变量,而我在这些特殊情况下遇到了问题!但是你的回答很有帮助:)太多了!现在明白了!我认为像C语言一样,需要首先定义所有变量,而我在这些特殊情况下遇到了问题!但你的回答很有帮助:)