我最近在一次面试中遇到了一个编码挑战,问题很简单。编写一个有两个函数的类:(1)allocate(some_string)
,它根据参数返回字符串,但返回值是参数加上一个数字。例如,调用allocate("apple")
将返回apple1
,再次调用它将返回apple2
,依此类推。(2) deallocate(some_string)
接受一个参数并使该字符串再次可用。也就是说,如果我调用deallocate(“apple1”),然后再次调用allocate("apple")
,那么allocate
会返回apple1
。你知道吗
这是我的密码:
class Tracker:
def __init__(self):
self.returned_host_names = set()
self.host_type_so_far = set()
def allocate(self, host_type):
self.counter = 0
self.host_type_so_far.add(host_type)
if host_type in self.host_type_so_far:
self.counter+=1
while True:
maybe_hostname = host_type + str(self.counter)
if maybe_hostname not in self.returned_host_names:
self.returned_host_names.add(maybe_hostname)
print(self.returned_host_names)
return maybe_hostname
else:
self.counter+=1
def deallocate(self, hostname):
if hostname in self.returned_host_names:
self.returned_host_names.remove(hostname)
实际上,代码并没有附带__init__
;这是我自己添加的。我目前正在使用这两个集合来记住返回的内容,然后取消分配以将它们从集合中移除。我的问题是,既然__init__
没有给出,我有没有其他的方法来编写分配?我最初的想法是在allocate()
中初始化这两个集合,但显然这不起作用。你知道吗
您可以在
allocate
方法中初始化self.returned_host_names
和self.host_type_so_far
,而不是通过检查对象是否已经具有该属性或没有使用hasattr
。为了防止deallocate
方法由于在allocate
之前调用的self.returned_host_names
未初始化而引发异常,可以在其周围添加try-except
块:请注意,在
__init__
方法之外初始化实例属性不是一个好的做法,我非常怀疑面试官是否真的不希望您编写自己的__init__
方法,即使您没有提供该方法。以上只是一个示例,说明了如何使其工作,但该方法不应在任何生产代码中使用。你知道吗相关问题 更多 >
编程相关推荐