[英]regarding python objects and their methods
我目前正在尝试用纯Python编写基于文本的冒险。 因此,我有一个Room类,看起来像这样(缩短):
class Room1(Room):
def __init__(self):
Room.__init__(self)
self.init_objects()
self.description = """Looks like a living room. There's a lamp, a
cupboard, and
a door to your right. On the floor, there's a carpet."""
self.door_state = 1
self.carpet_state = 0
self.images = [(text-based images)]
def init_objects(self):
self.objects = {"door" : Door1(),
"frontdoor" : FrontDoor(),
"carpet" : Carpet(),
"lamp" : Lamp1(),
"clock" : Clock(),
"escritoire" : Escritoire(),
"booklet" : Booklet(),
"screws" : Screws(),
"trapdoor" : TrapDoor()}
def update_image(self):
IMG_MAPPER = {(0, 0, 0) : 0,
(0, 0, 1) : 1,
(1, 0, 0) : 2,
(1, 0, 1) : 3,
(1, 1, 1) : 4,
(1, 1, 0) : 5,
(0, 1, 1) : 6,
(0, 1, 0) : 7}
key = (self.objects["door"].state, self.objects["carpet"].state)
self.img = img_mapper[key]
我的问题是房间的update_image()方法。 我需要将一个映射器存储在那里,以便根据对象的状态(打开/关闭)找出正确的图像,如果我将此映射器放在方法的开头,则每次使用该方法时,python都会读取并构造此字典叫,对吗? 因此,我是否应该将此映射器字典存储为诸如self.img_mapper_dict = {(0,0,0):0,...}之类的实例变量?
关于任何人的任何想法吗?
我认为您遇到的问题是, 每次调用update_image()
时 , img_mapper
都会重置为指定状态。 这是因为成员函数有其自己的作用域,因此,完成后,它将删除img_mapper
,并在下次调用更新函数时重新制作它。 存储为成员变量将摆脱此问题。
假设当前代码的结构方式正确,那么每次调用update_image()
方法时, IMAGE_MAPPER
都会分配给您。
现在,由于这是一个不会随时间变化的静态映射,因此从功能角度来看这不是问题-就像您要重置在对update_image()
调用之间应跟踪的值一样。
在性能方面,在这种特定情况下,这些缺点也将完全忽略不计。
但是,从纯粹的逻辑观点来看,使此映射成为类属性可能很有意义:
class Room1(Room):
IMG_MAPPING = {(0, 0, 0) : 0,
(0, 0, 1) : 1,
(1, 0, 0) : 2,
(1, 0, 1) : 3,
(1, 1, 1) : 4,
(1, 1, 0) : 5,
(0, 1, 1) : 6,
(0, 1, 0) : 7}
def __init__(self):
# ...
def update_image(self):
# ...
self.img = Room1.IMG_MAPPING[key]
我建议使用类属性而不是实例属性(或实例成员),因为该映射对于Room1
所有实例都将保持不变(对吗?我假设Room1
每个实例都具有完全相同的布局,只是不同的门状态等。)。 因此,它不依赖于实例的任何状态,而是类的属性。
还要注意,访问类属性的方式有所不同: Room1.IMG_MAPPING
而不是self.IMG_MAPPING
。 这也反映了它不依赖于实例的事实。
我看到的第一个问题是您的IMG_MAPPER字典具有三元组键。 但是您通过提供两个元组来访问它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.