OOP Python - 从构造函数参数或成员函数初始化成员变量?

时间:2016-07-12 19:19:47

标签: python-2.7 class oop member object-oriented-analysis

我在这个项目中有多个类,它们都面临着我要解释的相同情况。为简化起见,我将使用一个类及其具体情况的详细信息。

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()

问题

我在问这个更好的面向对象的方法是什么?

  • 关于这个#1
  • 的方法
  • 关于这个#2
  • 的方法

1 个答案:

答案 0 :(得分:1)

这不是一个意见问题吗?我会说“关于这个#2的方法”是一个坏主意,因为代码不会被编写为仅使用一次,并且有一天你或其他人可能想要使用ConnectedDevice并且可能会使用它无意中以未初始化的方式出现。即使你知道它应该怎么做,你也可以滑倒。

无论如何,恕我直言,一个更好的方法是“走向这个#3的方式”:

def main():

    Device0 = ConnectedDevice(get_mac_address(), get_ip_address())

...如果构造函数接收到任一参数的None,则引发异常。 (但那是我的口味。)