2016-11-28 3 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 

Следовательно, объект Краю будет создан только если обе node1 и node2 являются объектами узла. Благодаря

+0

И если node1 и node2 _не_ Вершины, что должно произойти? – 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 

Однако, делая этот вид проверки типа несколько в оппозиции к «мы» re all adult here "философия, которая популярна в сообществе Python. Вы должны доверять своим пользователям, чтобы предоставить объект, интерфейс которого удовлетворителен для задач, которые он должен выполнять, независимо от того, действительно ли он наследуется от узла. И ваши пользователи должны понимать, что если они не в состоянии поддерживать подразумеваемый контракт интерфейса, то это их собственная ошибка, и они не должны плакать.

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 
Смежные вопросы