我试图通过应用OOP和DRY方法来保持代码的整洁;然而,我发现自己被以下问题困住了。你知道吗
1)由于checkremote和backup方法依赖于sshlogin方法,是否有其他方法来写入它,以便完全初始化我的对象?你知道吗
2)如果没有更好的方法,我应该在哪里为PhoneBook类编写过程,以便按以下方式执行(1-checklocal,2-sshlogin,3-checkremote,4-backup)?主要是什么?你知道吗
class PhoneBook:
def __init__ (self, name, phone_number, birthdate, location):
self.name = name
self.phone_number = phone_number
self.birthdate = birthdate
self.location = location
self.ssh = None
def checklocal (self):
# Check local phonebook for existing names
pass
def sshlogin (self):
# SSH into remote server
def checkremote (self):
# Check remote phonebook for existing names
pass
def backup (self):
# Backup remote phonebook
在本例中,您可能希望使用上下文管理器和
with
关键字。你知道吗因为使用
Phonebook
对象需要事先进行“设置”阶段,所以您需要确保每次使用它时都能正确处理。所以你可以这样写代码:所有安装阶段的步骤(检查本地副本、连接(和断开)ssh会话、检查远程副本、备份等)都将作为上下文管理器安装/拆卸的一部分在“幕后”进行(换句话说,
with
语句会处理所有这些)。这类似于您应该如何使用open()
:干净地打开和关闭文件发生在“幕后”,自动。这很可能是您希望电话簿发生的情况。你知道吗
要使上下文管理器工作,可以使用python
__enter__
和__exit__
魔术方法。可能看起来像这样:至于你的
Add
(和Delete
)类,它真的不应该是一个类。可能是:一种
Phonebook
类的方法,如下所示:或
泛型函数,如:
还有一点:您的
Phonebook
类的命名不太好。基于__init__
方法,它更像是一个电话簿条目。您可能需要考虑将您的电话簿(作为上下文管理器,如上所述)分别实现为某种容器来保存条目(包括add
和delete
方法),把你拥有的Phonebook
类(改名为Entry
或别的什么)更多地放在一个电话簿Entry
对象上,这个对象可以添加到你的新Phonebook
对象中,在这种情况下,add方法可能更像这样:还有一件事:我注意到您正在使用制表符来定义类、函数以及其他不需要的东西。这是against the recommended practice—请改用4个空格。你知道吗
进一步的建议:对于像我建议的
Entry
类这样简单的东西,您可能只想使用collections.namedtuple
,如下所示:现在你可以这样做:
相关问题 更多 >
编程相关推荐