我在这个项目中有多个类,它们都面临着我要解释的相同情况。为简化起见,我将使用一个类及其具体情况的详细信息。
类
class ConnectedDevice(object):
def __init__(self, mac_address, ip_address):
self.mac_address = mac_address
self.ip_address = ip_address
关于此问题的方法#1
我可以通过构造函数的参数填充成员变量的实例。
这可以通过在main中的类之外使用单独的函数来获取必要的信息来完成。
def main():
mac_address = get_mac_address()
ip_address = get_ip_address()
Device0 = ConnectedDevice(mac_address, ip_address)
关于这个问题的方法#2
我可以在构造函数的参数中构造带None
的实例,并在事实之后使用成员函数来填充成员变量。显然,我会在我的课程中定义成员函数。
def main():
Device0 = ConnectedDevice(None, None)
Device0.set_mac_address()
Device0.set_ip_address()
问题
我在问这个更好的面向对象的方法是什么?
答案 0 :(得分:1)
这不是一个意见问题吗?我会说“关于这个#2的方法”是一个坏主意,因为代码不会被编写为仅使用一次,并且有一天你或其他人可能想要使用ConnectedDevice
并且可能会使用它无意中以未初始化的方式出现。即使你知道它应该怎么做,你也可以滑倒。
无论如何,恕我直言,一个更好的方法是“走向这个#3的方式”:
def main():
Device0 = ConnectedDevice(get_mac_address(), get_ip_address())
...如果构造函数接收到任一参数的None
,则引发异常。 (但那是我的口味。)