2016-11-28 71 views
0

是否有可能創建一個使用另一個類的對象的類的對象,例如:創建對象在Python

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 

因此邊緣的對象將僅創建兩個節點1和節點是Node的對象。 感謝

+0

如果節點1和節點是_not_節點,會發生什麼呢? – Kevin

+0

請注意,雖然python肯定有工具來做適當的類型檢查,但根據您的特定應用程序,可能沒有必要這樣做。請記住,python會進行動態輸入:更好地請求原諒而不是允許。 – farsil

回答

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繼承的。而且你的用戶應該明白,如果他們不能堅持隱含的接口合同,那麼這是他們自己的錯,他們不應該爲你哭泣。

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