【问题标题】:OOP Python -- initializing member variables from constructor parameters or from member functions?OOP Python - 从构造函数参数或成员函数初始化成员变量?
【发布时间】:2016-11-15 04:33:13
【问题描述】:

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

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 的方法

【问题讨论】:

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


    【解决方案1】:

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

    无论如何,恕我直言,更好的方法是“解决此问题的方法 #3”:

    def main():
    
        Device0 = ConnectedDevice(get_mac_address(), get_ip_address())
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多