0

你好我正在学习python,它也是我的第一语言。我试图弄清楚课程是如何运作的。我有这个小代码,经过一周的搜索,我无法让它工作。感谢你们对我的帮助。

此外,我试图弄清楚 getattr 和 super 做什么。我阅读了文档,但对我来说并不容易理解。英语不是我的母语,有时它有点难以理解。如果你能解释这两件事,或者如果你知道任何网站以简单的方式解释它,我真的很感谢你。

这是代码:

import sys


class Map(object):
    dicti = {'stuff': stuff(),
             'more_stuff': more_stuff()
    }

    class Stuff:

        def stuff(self):
            print "did it work?"
            next = raw_input("type next: ")

            if next == "next":
                return 'more_stuff'
            else:
                print "what? lets try again."
                return 'stuff'      

    class MoreStuff:

        def more_stuff(self):
            print "ok"

            next = raw_input('type next: ')

            if next == "next":
                return 'stuff'

            else:
                print "bye."
                sys.exit(0)


class NewClass(Map):

    def __init__(self, themap):

        self.themap = themap

    def Continu(self):

        next = self.themap

        while True:
            print "----"

            room = next()




a_test = NewClass('stuff')
a_test.Continu()
4

2 回答 2

1

您正在将字符串传递给'stuff'NewClass所以这变成了self.themap

稍后您正在分配next = self.themap,所以现在next也是对字符串的引用'stuff'

room = next()将失败,因为您不能调用字符串

于 2013-05-21T02:23:18.343 回答
0

您的课程的问题在于它似乎不代表任何东西(对不起,如果这很苛刻)。我不会修复您的代码,而是向您展示几个示例。

这些是我编写的示例类。第一个有点荒谬,但实际上很简单,可以教你一些东西。它使用hasattr的距离不远getattr

您的类可以在其中包含逻辑,但请尝试将它们视为管理有关对象的信息的方式。我指的是 Python 意义上的对象和这个词的正常含义。

另外,我注意到您还有一些其他类在Map. 现在只需将类作为单独的东西使用。像这样缩进并没有给他们任何特殊的关系Map

class OppMan:

    def __init__(self, awake = False):

        self.truth = awake
        self.answers = 0


    def echo(self, userIn):

        if type(userIn) == (int or float):
            answer = -1*self.truth*userIn

        elif hasattr(userIn, '__str__') or hasattr(userIn, '__repr__'):
            answer = 'not '*self.truth + str(userIn)

        else:
            try:
                answer = -1*userIn
            except:
                answer = 'I am only human'

        self.answers += 1
        return answer

示例用法:

Barney = OppMan(True)

print(Barney.echo(420))
print(Barney.echo('yours'))
print(Barney.echo(['a','b','c']))
print(Barney.answers)


Betty = OppMan()

print(Betty.echo('you figure it out'))

这就像分数,有点像:

class Rational:

    def __init__(self, numer, denom):
        self.n = numer
        self.d = denom



    def __add__(self, other):
        return Rational((self.n*other.d)+(self.d*other.n), self.d*other.d)

    def __mul__(self, other):
        return Rational(self.n*other.n, self.d*other.d)

    def __str__(self):
        return str(self.n) + '/' + str(self.d)

示例用法:

foo = Rational(3,5)
bar = Rational(1,7)
print(foo+bar)


foo = Rational('3','5')
bar = Rational(1,2)
print(foo+bar)

我不确定您要对“房间”、字典等做什么,但请研究这些并尝试找到一些要解决的简单问题。弄清楚这些是如何工作的可能需要一段时间,但最终你会了解更多关于类的信息。

于 2013-05-21T06:00:27.550 回答