p我正在编写一些不重要的代码,但我想做的一件事是从另一个类中调用一个函数,然后将类名从列表中拉出并放入变量中。请注意,在过去的两周里,我实际上刚刚学习了 python,并且几乎不知道如何编程。
我认为这应该做的是当调用 getattr() 时,它将传递包含在相应类中的属性“run_question”,该属性与 question_type 中的名称相同,然后将其传递给“running_question”。我知道可能有更好的方法来做我正在尝试的事情,但我想知道为什么这种方法不能像我认为的那样起作用。
#! /usr/bin/python
rom random import randrange
class QuestionRunner(object):
def __init__(self):
##initialize score to zero
self.score = 0
##initialize class with the types of questions
self.questiontypes = ['Addition', 'Subtraction', 'Division', 'Multiplication']
##randomly selects question type from self.questiontypes list
def random_type(self):
type = self.questiontypes[randrange(0, 4)]
return type
##question function runner, runs question function from self
def run_questions(self):
try:
question_type = self.random_type()
running_question = getattr(question_type, 'run_question' )
except AttributeError:
print question_type
print "Attribute error:Attribute not found"
else: running_question()
class Question(object):
pass
class Multiplication(Question):
def run_question(self):
print "*"
class Division(Question):
def run_question(self):
print "/"
class Subtraction(Question):
def run_question(self):
print "-"
class Addition(Question):
def run_question(self):
print "+"
test = QuestionRunner()
test.run_questions()
这输出:
[david@leonid mathtest] :( $ python mathtest.py
Division
Attribute error:Attribute not found
[david@leonid mathtest] :) $
这表明我没有得到我期望的 run_question 属性。
我应该注意,当我按以下方式将函数放入 QuestionRunner 类时,一切都按预期工作。我使用真正不需要的类的主要原因是它实际上可以很好地掌握如何让它们做我想做的事情。
#! /usr/bin/python
from random import randrange
class QuestionRunner(object):
def __init__(self):
##initialize score to zero
self.score = 0
##initialize class with the types of questions
self.questiontypes = ['addition', 'subtraction', 'division', 'multiplication']
##randomly selects question type from self.questiontypes list
def random_type(self):
type = self.questiontypes[randrange(0, 4)]
return type
##question function runner, runs question function from self
def run_questions(self):
try:
question_type = self.random_type()
running_question = getattr(self, question_type)
except AttributeError:
exit(1)
else: running_question()
def multiplication(self):
print "*"
def division(self):
print "/"
def addition(self):
print "+"
def subtraction(self):
print "-"
test = QuestionRunner()
test.run_questions()
关于为什么这不起作用的任何帮助都会很棒,我非常感谢。
关于为什么这不起作用的任何帮助都会很棒,我非常感谢。