Python:类/子类和继承/确定子类

时间:2016-11-15 18:53:49

标签: python-2.7 class subclass

所以我一直在努力理解类,子类,实例化等等 好东西。我一直在尝试编写类似于a的简单代码 我看到的代码更复杂(或者至少我很难遵循),但是 我无法连接所有部件。

这就是我想要发生的事情。

我们有一流的酒店。当您进入酒店时,您有一个名字和一个房间 数。您房间的数量决定了您的楼层。

class Hotel(object):

    def __init__(self, name, room_number):
        self.name = name
        self.room_number = room_number
        self.floor = self.room_number//10

所以

Abe = Hotel("Abe", 104)
print "%s is in room %d on floor %d." % (Abe.name,
                                         Abe.room_number,
                                         Abe.floor)

安倍位于1楼的104室。

Bob = Hotel("Bob", 225)
print "%s is in room %d on floor %d." % (Bob.name,
                                         Bob.room_number,
                                         Bob.floor)

鲍勃在2楼的225室。

我希望第一层和第二层成为酒店的子类。 最快的楼层将有一台自动售货机,第二层将有 电脑大厅。

class FirstFloor(Hotel):
    # Something should go here?

    def vending_machine(): # something inside the ()?
        print "You buy a soda and feel refreshed."


class SecondFloor(Hotel):
    # Something should go here?

    def computer_lobby(): # something inside the ()?
        print "You have learned to write python!"

我需要添加什么才能确定此人的房间号码是否可以使用自动售货机或电脑大厅?

很抱歉,如果看起来不太对劲,我对此很新,这是我在stackoverflow上的第一篇文章。

1 个答案:

答案 0 :(得分:0)

我认为你很难理解如何将继承应用于你展示的设计,因为它没有多大意义。 Hotel与酒店中的房间不同,但您当前的Hotel课程具有与单个房间内的人相关的属性。

如果你想要一个具有这些属性的类,你应该把它作为一个Room类,每个房间都有实例,或者对于住在房间里的人来说可能是一个Guest类。 floor可以是容纳几个房间的容器(如列表)。或者也许应该有一个Floor类,其中包含一系列房间以及一些其他数据和方法。

如果FirstFloorSecondFloor不是单独的类,而是具有不同数据的同一类的实例,也可能更好。如果只有一个单独的实例,通常就是你不需要写一个类的标志!

对所有楼层使用单个类会限制您将额外方法添加到单个楼层的能力。但想想你什么时候可以调用这种方法。如果只有一个楼层有computer_lobby方法,那么当您事先不知道变量some_floor.computer_lobby()包含哪种类型的对象时,您是否可以调用some_floor?可能不会,因为它会失败,如果它是任何楼层,但第二个。

更明智的设计是制作关于每个楼层数据而不是方法的“特殊”内容。也许ComputerLobbyRoom的特殊子类,可以包含在Floor类的实例的列表中。