检查对象在面向对象的代码中是否有值 - python

时间:2016-04-13 18:21:38

标签: python object-oriented-analysis

我有一个面向对象的程序,我制作了房间。每个房间都有价值,如北东南或下一个可以移动到的方向。

#ROOM CONSTRUCTOR
class Room(object):
    #Constructor
    def __init__(self, name, n_path, s_path, e_path, w_path, next_path, description):
        self.name = name
        self.description = description
        self.north = n_path
        self.south = s_path
        self.east = e_path
        self.west = w_path
        self.next = next_path

这是我的房间构造函数。我的房间看起来像:

Northwest_Beach = Room('Northwest Beach',None, 'Mauna_Kea_Volcano', 'Volcano', None, Surf, 'Description goes here')

我想显示玩家可以去的所有方向。我试着这样做:

if Room(n_path):
    print "---North"

我会对每个方向做同样的事情:南,东,西,和下一个。它告诉我n_path是未定义的。有没有更好的方法来做到这一点,或者我可以解决它?

3 个答案:

答案 0 :(得分:1)

#ROOM CONSTRUCTOR
class Room(object):
    #Constructor
    def __init__(self, name, n_path, s_path, e_path, w_path, next_path, description):
        self.name = name
        self.description = description
        self.north = n_path
        self.south = s_path
        self.east = e_path
        self.west = w_path
        self.next = next_path

Northwest_Beach = Room('Northwest Beach',None, 'Mauna_Kea_Volcano', 'Volcano', None, 'Surf', 'Description goes here')
print Northwest_Beach.north
# OUTPUT: None

您只是没有正确访问North的class属性,如上所示:

Northwest_Beach.north

答案 1 :(得分:0)

Room的名称。您想指定对象

如果相关代码位于其中一个Room方法中,请尝试:

if self.north:
    print "---North"

否则,请使用对象的名称,如下所示:

if Northwest_Beach.north:
    print "--North"

或许您有一个变量可以承担用户碰巧所处的任何空间。如果是这样,您的代码将如下所示:

if current_room.north:
    print "--North"

无论如何,您希望点(.)的左侧是绑定到RoomselfNorthwest_Beach类型的对象的名称,或者current_room),并且点的右侧是房间的属性之一,(northsouth等。)

答案 2 :(得分:0)

在这一行:

if Room(n_path):

Room(n_path)正在初始化一个新类,或者它至少会传入正确的参数,但是当你传入n_path时你的变量n_path没有在任何地方定义,所以它抛出了这个异常

您已经设置了一个具有属性north的类实例,方法是传入n_path争论,您可以查看

Northwest_Beach.north