在Python中用类创建对象

时间:2016-11-28 13:18:51

标签: python class object

是否可以使用另一个类的对象创建类的对象,例如:

class Node(object):

    def __init__(self, name):
        self.name = name

class Edge(object):

    def __init__(self, name, node1, node2):
        self.name = name
        self.node1 = node1 #only if it is an object of Node
        self.node2 = node2 #only if it is an object of Node

因此,只有node1和node2都是Node的对象时才会创建Edge的对象。 感谢

2 个答案:

答案 0 :(得分:2)

您可以验证对象的类型,如果它们不是您想要的,则引发异常:

def __init__(self, name, node1, node2):
    if not isinstance(node1, Node):
        raise ValueError("Expected node1 to be a Node")
    if not isinstance(node2, Node):
        raise ValueError("Expected node2 to be a Node")
    self.name = name
    self.node1 = node1 #only if it is an object of Node
    self.node2 = node2 #only if it is an object of Node

然而,进行这种类型检查在某种程度上与Python社区中流行的“我们都是成年人”的哲学相对立。您应该信任您的用户提供一个对象,该对象的接口对于它需要执行的任务是满意的,无论它是否实际从Node继承。并且您的用户应该明白,如果他们未能维护隐含的接口合同,那么这是他们自己的错,他们不应该向您哭泣。

答案 1 :(得分:0)

使用this article检查对象是否属于给定类

class Node(object):

    def __init__(self, name):
        self.name = name

class Edge(object):

    def __init__(self, name, node1, node2):
        self.name = name
        if isinstance(node1, Node):
            self.node1 = node1 #only if it is an object of Node
        else:
            raise ValueError("Expected node1 to be a Node")
        if isinstance(node2, Node):
            self.node2 = node2 #only if it is an object of Node