- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近在求职面试中遇到了编程挑战,问题非常简单。写一个类,有两个函数: (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
将它包围起来:
class Tracker:
def allocate(self, host_type):
if not hasattr(self, 'returned_host_names'):
self.returned_host_names = set()
self.host_type_so_far = set()
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):
try:
if hostname in self.returned_host_names:
self.returned_host_names.remove(hostname)
except AttributeError:
pass
请注意,在 __init__
方法之外初始化实例属性不是一个好的做法,我非常怀疑面试官真的不希望您编写自己的 __init__
方法,即使没有为您提供方法。以上只是您如何让它发挥作用的示例,但不应在任何生产代码中使用该方法。
关于python - 还记得上次函数调用的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52942225/
之前看到一些类似的问题,想弄清楚。 在this article ,据说异步调用“没有线程”。 然而,in another one ,据说 Here, however, we’re running th
我为我公司的平板电脑(SAMSUNG Galaxy Tab Active2)开发了一个简单的软件,自上周五(2018 年 11 月 23 日)以来,它无法正常工作。我检查了该应用程序的所有功能,其中有
我正在使用 hadoop map-reduce 作业进行一些文本处理。我的工作已完成 99.2%,并停留在上一个 map 工作上。 map 输出的最后几行如下所示。上次发生此问题时,我尝试打印出从 m
上次 Ubuntu 更新后有人对 Docker 有疑问吗?我有 2 个由 docker-compose 在 ubuntu18.04 中运行的项目。两个项目都运行良好,但在 *.yml 中进行 0 次更
SQL Developer 在表中显示公共(public)同义词的创建和上次 DDL 时间: CREATED 15-AUG-09 LAST_DDL_TIME 15-AUG-09 O
我正在使用带有以下插件的 mavenized 库项目: com.jayway.maven.plugins.android.generation2
我正在使用 Jssor Slider 作为轮播。在 Google Chrome 上次更新到版本 45.0.2454.85 之前,它一直运行良好。想法是它不显示图像。目前,它们位于标签中,可在 Safa
我是一名优秀的程序员,十分优秀!