如何理解python类?

时间:2013-05-21 02:15:02

标签: python class oop

您好我正在学习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()

2 个答案:

答案 0 :(得分:1)

您正在将字符串'stuff'传递给NewClass,因此正在变为self.themap

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

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

答案 1 :(得分:0)

你班级的问题在于它似乎没有代表任何东西(对不起,如果那是苛刻的)。而不是修复你的代码,我只会向你展示几个例子。

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

您的类可以包含逻辑,但尝试将它们视为管理对象信息的方法。我的意思是 object 在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)

我不确定你要对“房间”,字典等做什么,但研究这些并尝试找到一些简单的问题来解决。可能需要一段时间来弄清楚这些是如何工作的,但最后你会对课程有更多了解。