python:修改子方法中父方法的数组
我有一个父类,如下所示:python:修改子方法中父方法的数组,python,arrays,class,methods,Python,Arrays,Class,Methods,我有一个父类,如下所示: class student: def __init__(self, name, age, field): self.name = name self.age = age self.field = field def abilities(self): abs = ["study", "drink", "party&qu
class student:
def __init__(self, name, age, field):
self.name = name
self.age = age
self.field = field
def abilities(self):
abs = ["study", "drink", "party"]
action = np.random.choice(abs, replace = True)
return(action)
现在,毕业后,这个学生长大了,他的能力也发生了变化:
class adult(student):
def abilities(self):
super().abilities()
abs.append("work")
abs.remove("party")
if action == work:
print("paying off that student loan")
这是行不通的。我得到的错误是:未定义名称“abs”
现在,我试图通过使用super().abilities.abs
访问父类中的abilities
方法,但随后我引用了函数返回的对象和self.abilities.abs
,但随后我引用了该类
非常感谢您就如何从子方法访问父方法中的数组提出的任何建议。您编写的代码中有一些缺陷:
abs
。不应该这样做super().abilities()
,它返回一个值而不存储和使用它abs.append(“work”)
时,您试图为内置函数赋值,而不是从父函数中为局部变量abs
。将其提取到对象变量可以解决这个问题。请参见构造函数中的,self.abs
能力
方法不返回任何内容class student:
def __init__(self, name, age, field):
self.name = name
self.age = age
self.field = field
def abilities(self):
abs = ["study", "drink", "party"]
action = np.random.choice(abs, replace = True)
return(action)
将numpy导入为np
班级学生:
定义初始(自我、姓名、年龄、字段):
self.name=名称
self.age=年龄
self.field=字段
self.abs=[“学习”、“喝酒”、“聚会”]
def能力(自我):
action=np.random.choice(self.abs,replace=True)
返回动作
班级成人(学生):
定义初始(自我、姓名、年龄、字段):
超级(成人,自我)。\uuuu初始(姓名、年龄、字段)
self.abs.append(“工作”)
自身abs.移除(“一方”)
def能力(自我):
action=super().能力()
如果操作==“工作”:
打印(“偿还学生贷款”)
返回动作
除了解决这个问题,您还应该查看@chepner评论中提到的对象继承结构。成年人不是学生。继承在这里不合适。您可以创建
成人
的实例,但前提是学生
的实例,或者创建一个Person
类,其实例可以处于“学生”状态或“成人”状态(尽管我建议不要这样做)。在abs
的所有实例中使用self.abs
,非常感谢您在@mpSchrader上的详细评论。是否您的一些评论提到了Python2.x和3.x之间的差异?无论如何,我对定义只有一个疑问action=super().abilities()
。如果选择了工作以外的其他操作,则会返回短语“偿还学生贷款”。不过,我无法确定确切的问题是什么。不客气。我用Python3测试它,但它也应该用Python2。当前,它将打印偿还该学生贷款
并返回当前操作值。如果您想返回偿还该学生贷款
如果操作是工作
,则可以将打印行替换为返回“偿还该学生贷款”
检查!我尝试将操作定义为print语句,但忘记在同一个条件语句中返回它。非常感谢分享您的见解!当然我很高兴它帮助并回答了你所有的问题。抱歉,我以为我已经接受了。相反,我只是投了更高的票。