2

I am very new to python and need some help with instantiating an object. The python interpreter is giving me trouble when instantiating an object of a class I defined. There are two classes, BTNode and BST (which are stored in files bst_node.py and bst.py respectively):

# file: bst_node.py
class BTNode:
 """a binary search tree node implementation"""
 def ___init___(self, value):
 self.value = value
 self.left is None
 self.right is None
 self.parent is None
 def ___init___(self, value, left, right, parent):
 """set the parameters to corresponding class members"""
 self.value = value
 self.left = left
 self.right = right
 self.parent = parent
 def is_leaf(self):
 """check whether this node is a leaf"""
 if self.left.value is None and self.right.value is None:
 return True 
 return False

# file: bst.py
from bst_node import *
class BST:
 """a binary search tree implementation"""
 def ___init___(self, value):
 self.root = BTNode(value)
 def insert(self, curRoot, newValue):
 if curRoot.is_leaf():
 if newValue < curRoot.value:
 newNode = BTNode(newValue, None, None, curRoot)
 curRoot.left = newNode
 else:
 newNode = BTNode(newValue, None, None, curRoot)
 curRoot.right = newNode
 else:
 if newValue < curRoot.value:
 self.insert(curRoot.left, newValue)
 else:
 self.insert(curRoot.right, newValue)

So, in the interpreter I do:

import bst as b
t1 = b.BST(8)

and I get an error which says that this constructor takes no arguments

The constructor clearly takes an argument value so what is going wrong here? How can I fix this error?

Thanks, all help is greatly appreciated!

moooeeeep
32.6k26 gold badges109 silver badges196 bronze badges
asked Mar 18, 2013 at 20:52
1
  • 2
    Not your question but unless I'm mistaken you'll run into a problem with the lines like self.left is none because is compares, and will either be True or False. Use self.left = None instead. Commented Mar 18, 2013 at 20:57

3 Answers 3

5

The first issue is that you called your functions ___init___ instead of __init__. All of the 'special methods' use two underscores.

A second issue in this code is that in BTNode you redefined __init__. You can't overload functions in python. When you reclare __init__ you effectively deleted the first constructor.

A third issue is your usage of is. is is an operator that checks whether two objects are exactly the same and returns True or False. In the constructor, you have a few self.left is None is examining the value of self.left (which wasn't declared yet), and examining whether or not it is None. To set it, use = as follows:self.left = None

To fix the second and third issue you should use default argument values. For example:

def __init__(self, value, left=None, right=None, parent=None):

answered Mar 18, 2013 at 20:56
Sign up to request clarification or add additional context in comments.

Comments

4

In addition to the number of underscores problem, you should replace

def ___init___(self, value):
 self.value = value
 self.left is None
 self.right is None
 self.parent is None
def ___init___(self, value, left, right, parent):
 """set the parameters to corresponding class members"""
 self.value = value
 self.left = left
 self.right = right
 self.parent = parent

with

def __init__(self, value, left=None, right=None, parent=None):
 """set the parameters to corresponding class members"""
 self.value = value
 self.left = left
 self.right = right
 self.parent = parent

Because as @Moshe points out, you can't overload functions, you should use default arguments insted.

answered Mar 18, 2013 at 20:58

Comments

2

Changing ___init___ to __init__ should fix it. (2 underscores vs 3)

answered Mar 18, 2013 at 20:55

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.