0

Is it possible to create an object of a class using objects of another class, for example:

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

Hence an object of Edge will only be created if both node1 and node2 are objects of Node. Thanks

asked Nov 28, 2016 at 13:18
2
  • And if node1 and node2 are not Nodes, what should happen? Commented Nov 28, 2016 at 13:25
  • Note that while python has definitely the tools to do proper type checking, it could be unnecessary to do it depending on your particular application. Remember that python does dynamic typing: better ask for forgiveness than permission. Commented Nov 28, 2016 at 13:30

2 Answers 2

2

You can verify the objects' types and raise an exception if they aren't what you want:

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

However, doing this kind of type checking is somewhat in opposition to the "we're all adults here" philosophy that is popular in the Python community. You should trust your users to provide an object whose interface is satisfactory for the tasks it needs to perform, regardless of whether it actually inherits from Node. And your users should understand that if they fail to uphold the implied interface contract, then it's their own fault and they shouldn't come crying to you.

answered Nov 28, 2016 at 13:22
Sign up to request clarification or add additional context in comments.

Comments

0

use this article to check if object is of given class

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
answered Nov 28, 2016 at 13:24

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.