新手总数...需要帮助了解python类

时间:2014-04-14 23:01:48

标签: python class

我对python的理解是无所不能的...一直在用自己阅读看似百种不同的方法来解决这个问题。下面我分配了作业说明和我的代码...截至目前,我无法使用' getAnimal()'命令。我不确定它的作用或工作原理。提前致谢:D

作业说明:"为一个班级动物园写一个班级定义。'它应该有动物类型,食草动物/食肉动物/杂食动物以及内/外的实例变量。它还应该有一个getAnimal()方法来显示动物信息。写一个单独的" ZooDriver" a)创建动物园动物的三个实例,b)获取用户输入以查看动物(1,2,3)c)显示动物信息起诉getAnimal()。"

~~~~~~~~我的代码:

class Zoo:
def __init__(self, animal, animal_type, habitat):
    self.animal = animal
    self.animal_type = animal_type
    self.habitat = habitat

 user_input=raw_input("Enter the number 1, 2, or 3 for information on an animal.")

 if user_input == "1":
     my_animal = Zoo("Giraffe", "herbivore", "outside")
 elif user_input == "2":
     my_animal = Zoo("Lion", "carnivore", "inside")
 elif user_input == "3":
     my_animal = Zoo("Bear", "omnivore", "inside")

 print "Your animal is a %s, it is a %s, and has an %s habitat." % (my_animal.animal,        my_animal.animal_type, my_animal.habitat)

3 个答案:

答案 0 :(得分:2)

一个类定义了事物的类型。一个实例是该类型的一个 thing 。例如,你可以说Building是一种东西。

让我们从名为Building的小组开始:

class Building():
    pass

现在,要创建一个实际的建筑 - 一个实例 - 我们称它几乎就像是一个函数:

b1 = Building()
b2 = Building()
b3 = Building()

在那里,我们刚刚创建了三座建筑物。它们是相同的,不是很有用。也许我们可以在创建它时为它命名,并将其存储在实例变量中。这需要创建一个带参数的构造函数。所有类方法也必须将self作为其第一个参数,因此我们的构造函数将采用两个参数:

class Building():
    def __init__(self, name):
        self.name = name

现在我们可以创建三个不同的建筑物:

b1 = Building("firehouse")
b2 = Building("hospital")
b3 = Building("church")

如果我们想创建一个"驱动程序"创建三座建筑的班级,我们可以很容易地做到这一点。如果要在创建实例时设置实例变量或执行某些操作,可以在构造函数中执行此操作。例如,这会创建一个类,它创建三个建筑物并将它们存储在一个数组中:

class Town():
    def __init__(self):
        self.buildings = [
            Building("firehouse"),
            Building("hospital"),
            Building("church")
        ]

我们现在可以创建一个创建三个其他对象的对象。希望这足以让你超越理解课程的最初障碍。

答案 1 :(得分:0)

好的我会尝试回答这里的主要问题:课程是什么。

From Google: class /klas/
             noun: class; plural noun: classes

1.
a set or category of things having some property or attribute in common and
differentiated from others by kind, type, or quality.

在编程中,类就是这样。比方说,比如你有班级狗。狗吠“ruf ruff”。

我们可以使用这些信息在python中定义dog类。

class Dog:
    def bark(self):
        print "ruf ruff"

要使用该类,请instantiated调用()构造函数:

Spot = Dog()

然后我们想让Spot吠叫,所以我们调用类的method

Spot.bark()

为了进一步解释这里的代码细节,将超出这个问题的范围。

进一步阅读:

http://en.wikipedia.org/wiki/Instance_%28computer_science%29

http://en.wikipedia.org/wiki/Method_%28computer_programming%29

答案 2 :(得分:-1)

直接回答:

class Zoo(object):
    def __init__(self, name="Python Zoo"):
        self.name = name
        self.animals = list()

    def getAnimal(self,index):
        index = index - 1 # account for zero-indexing
        try:
            print("Animal is {0.name}\n  Diet: {0.diet}\n  Habitat: {0.habitat}".format(
                self.animals[index]))
        except IndexError:
            print("No animal at index {}".format(index+1))

    def listAnimals(self,index):
        for i,animal in enumerate(self.animals, start=1):
            print("{i:>3}: {animal.name}".format(i=i,animal=animal))


class Animal(object):
    def __init__(self, name=None, diet=None, habitat=None):
        if any([attr is None for attr in [name,diet,habitat]]):
            raise ValueError("Must supply values for all attributes")
        self.name = name
        self.diet = diet
        self.habitat = habitat


class ZooDriver(object):
    def __init__(self):
        self.zoo = Zoo()
        self.zoo.animals = [Animal(name="Giraffe", diet="Herbivore", habitat="Outside"),
                            Animal(name="Lion", diet="Carnivore", habitat="Inside"),
                            Animal(name="Bear", diet="Herbivore", habitat="Inside")]

    def run(self):
        while True:
            print("1. List Animals")
            print("2. Get information about an animal (by index)"
            print("3. Quit")
            input_correct = False
            while not input_correct:
                in_ = input(">> ")
                if in_ in ['1','2','3']:
                    input_correct = True
                    {'1':self.zoo.listAnimals,
                     '2':lambda x: self.zoo.getAnimal(input("index #: ")),
                     '3': self.exit}[in_]()
                else:
                    print("Incorrect input")
    def exit(self):
        return

if __name__ == "__main__":
    ZooDriver().run()

我实际上并没有运行这段代码,所以可能会发生一些愚蠢的拼写错误,并且通常会出现#34; off-by-one"错误(哎呀),但我对它很有信心。它显示了您的教师赢得的许多概念,并期望您已经掌握了(例如字符串格式化,很可能,几乎可以肯定哈希表与lambdas)。出于这个原因,我强烈建议您不要复制此代码以便上交。