Python 实例变量包含另一个实例 class 但为什么我不能访问该变量的实例变量
Python Instance Variable contains an instance of another class but why can't I access the instance variable of that variable
我有一个学生 class、节点 class 和树 class。基本上,我想将 Student class 的实例传递给 Node class 的实例变量。我正在尝试访问包含 Student class 实例的节点实例变量的实例变量。为什么我会收到错误消息?抱歉,我通常在 Java 中编写代码,试图理解 Python。
这是我的代码:
class Node(object):
def __init__(self, value):
self.left = None
self.right = None
self.data = value
def __repr__(self):
return str(self.data.__repr__)
def __str__(self):
return str(self.data.__str__)
class Tree(object):
def __init__(self):
self.root = None
def addNode(self, node, value):
if node is None:
self.root = value
else:
if value.data.age<node.data.age:
if node.left is None:
node.left = value
else:
self.addNode(node.left, value)
else:
if node.right is None:
node.right = value
else:
self.addNode(node.right, value)
def print_in_order(self, node):
if node is not None:
self.print_in_order(node.left)
print(node)
self.print_in_order(node.right)
class Student(object):
def __init__(self, fname, lname, major, age):
self.fname = fname
self.lname = lname
self.major = major
self.age = age
def __repr__(self):
return "%s %s" % (self.fname, self.lname)
def __str__(self):
return "Student name: %s %s. Major's in %s and is %s years old" % (self.fname, self.lname, self.major, self.age)
#make student information
student1 = Student("Richard", "Nono", "Electrical Engineer", 22)
student2 = Student("Happy", "Tail", "Psychology", 19)
student3 = Student("Honda", "Make", "Mechanical Engineer", 21)
student4 = Student("John", "Ladgo", "Computer Science", 20)
student5 = Student("Remember", "Assignment", "Music", 23)
#make nodes from students
node1 = Node(student1)
node2 = Node(student2)
node3 = Node(student3)
node4 = Node(student4)
node5 = Node(student5)
#make tree and populate it witht he nodes
bts = Tree()
bts.addNode(bts.root, node1)
bts.addNode(bts.root, node2)
bts.addNode(bts.root, node3)
bts.addNode(bts.root, node4)
bts.addNode(bts.root, node5)
#print the tree
bts.print_in_order(bts.root)
我在树 class 中尝试执行 node.data.age
时遇到错误
节点 class 的实例变量 "data" 应包含学生 class 的实例。为什么我不能那样做?
这是我的主要内容:
def main():
#make student information
student1 = Student("Richard", "Nono", "Electrical Engineer", 22)
student2 = Student("Happy", "Tail", "Psychology", 19)
student3 = Student("Honda", "Make", "Mechanical Engineer", 21)
student4 = Student("John", "Ladgo", "Computer Science", 20)
student5 = Student("Remember", "Assignment", "Music", 23)
#make nodes from students
node1 = Node(student1)
node2 = Node(student2)
node3 = Node(student3)
node4 = Node(student4)
node5 = Node(student5)
#make tree and populate it witht he nodes
bts = Tree()
bts.addNode(bts.root, node1)
bts.addNode(bts.root, node2)
bts.addNode(bts.root, node3)
bts.addNode(bts.root, node4)
bts.addNode(bts.root, node5)
#print the tree
bts.printInorder(bts.root)
main()
似乎从未定义过 node.data.age。你试过node.age吗?
class Node(Student):
def __init__(self, value):
self.left = None
self.right = None
self.data = value
当您传入值时,您正在将数据设置为值,但是没有额外保存任何内容。
希望这就是您要找的。
另外请在编写 python 代码时尽量遵循 PEP8 编码标准。
class Node(object):
def __init__(self, value):
self.left = None
self.right = None
self.data = value
def __repr__(self):
return self.data.__repr__()
def __str__(self):
return self.data.__str__()
class Tree(object):
def __init__(self):
self.root = None
def add_node(self, node, value):
if node is None:
self.root = value
else:
if value.data.age < node.data.age:
if node.left is None:
node.left = value
else:
self.add_node(node.left, value)
else:
if node.right is None:
node.right = value
else:
self.add_node(node.right, value)
def print_in_order(self, node):
if node is not None:
self.print_in_order(node.left)
print(node)
self.print_in_order(node.right)
class Student(object):
def __init__(self, fname, lname, major, age):
self.fname = fname
self.lname = lname
self.major = major
self.age = age
def __repr__(self):
return "%s %s" % (self.fname, self.lname)
def __str__(self):
return "Student name: %s %s. Major's in %s and is %s years old" % (self.fname, self.lname, self.major, self.age)
student1 = Student("Richard", "Nono", "Electrical Engineer", 22)
student2 = Student("Happy", "Tail", "Psychology", 19)
student3 = Student("Honda", "Make", "Mechanical Engineer", 21)
student4 = Student("John", "Ladgo", "Computer Science", 20)
student5 = Student("Remember", "Assignment", "Music", 23)
node1 = Node(student1)
node2 = Node(student2)
node3 = Node(student3)
node4 = Node(student4)
node5 = Node(student5)
bts = Tree()
bts.add_node(bts.root, node1)
bts.add_node(bts.root, node2)
bts.add_node(bts.root, node3)
bts.add_node(bts.root, node4)
bts.add_node(bts.root, node5)
bts.print_in_order(bts.root)
我有一个学生 class、节点 class 和树 class。基本上,我想将 Student class 的实例传递给 Node class 的实例变量。我正在尝试访问包含 Student class 实例的节点实例变量的实例变量。为什么我会收到错误消息?抱歉,我通常在 Java 中编写代码,试图理解 Python。
这是我的代码:
class Node(object):
def __init__(self, value):
self.left = None
self.right = None
self.data = value
def __repr__(self):
return str(self.data.__repr__)
def __str__(self):
return str(self.data.__str__)
class Tree(object):
def __init__(self):
self.root = None
def addNode(self, node, value):
if node is None:
self.root = value
else:
if value.data.age<node.data.age:
if node.left is None:
node.left = value
else:
self.addNode(node.left, value)
else:
if node.right is None:
node.right = value
else:
self.addNode(node.right, value)
def print_in_order(self, node):
if node is not None:
self.print_in_order(node.left)
print(node)
self.print_in_order(node.right)
class Student(object):
def __init__(self, fname, lname, major, age):
self.fname = fname
self.lname = lname
self.major = major
self.age = age
def __repr__(self):
return "%s %s" % (self.fname, self.lname)
def __str__(self):
return "Student name: %s %s. Major's in %s and is %s years old" % (self.fname, self.lname, self.major, self.age)
#make student information
student1 = Student("Richard", "Nono", "Electrical Engineer", 22)
student2 = Student("Happy", "Tail", "Psychology", 19)
student3 = Student("Honda", "Make", "Mechanical Engineer", 21)
student4 = Student("John", "Ladgo", "Computer Science", 20)
student5 = Student("Remember", "Assignment", "Music", 23)
#make nodes from students
node1 = Node(student1)
node2 = Node(student2)
node3 = Node(student3)
node4 = Node(student4)
node5 = Node(student5)
#make tree and populate it witht he nodes
bts = Tree()
bts.addNode(bts.root, node1)
bts.addNode(bts.root, node2)
bts.addNode(bts.root, node3)
bts.addNode(bts.root, node4)
bts.addNode(bts.root, node5)
#print the tree
bts.print_in_order(bts.root)
我在树 class 中尝试执行 node.data.age
节点 class 的实例变量 "data" 应包含学生 class 的实例。为什么我不能那样做?
这是我的主要内容:
def main():
#make student information
student1 = Student("Richard", "Nono", "Electrical Engineer", 22)
student2 = Student("Happy", "Tail", "Psychology", 19)
student3 = Student("Honda", "Make", "Mechanical Engineer", 21)
student4 = Student("John", "Ladgo", "Computer Science", 20)
student5 = Student("Remember", "Assignment", "Music", 23)
#make nodes from students
node1 = Node(student1)
node2 = Node(student2)
node3 = Node(student3)
node4 = Node(student4)
node5 = Node(student5)
#make tree and populate it witht he nodes
bts = Tree()
bts.addNode(bts.root, node1)
bts.addNode(bts.root, node2)
bts.addNode(bts.root, node3)
bts.addNode(bts.root, node4)
bts.addNode(bts.root, node5)
#print the tree
bts.printInorder(bts.root)
main()
似乎从未定义过 node.data.age。你试过node.age吗?
class Node(Student):
def __init__(self, value):
self.left = None
self.right = None
self.data = value
当您传入值时,您正在将数据设置为值,但是没有额外保存任何内容。
希望这就是您要找的。 另外请在编写 python 代码时尽量遵循 PEP8 编码标准。
class Node(object):
def __init__(self, value):
self.left = None
self.right = None
self.data = value
def __repr__(self):
return self.data.__repr__()
def __str__(self):
return self.data.__str__()
class Tree(object):
def __init__(self):
self.root = None
def add_node(self, node, value):
if node is None:
self.root = value
else:
if value.data.age < node.data.age:
if node.left is None:
node.left = value
else:
self.add_node(node.left, value)
else:
if node.right is None:
node.right = value
else:
self.add_node(node.right, value)
def print_in_order(self, node):
if node is not None:
self.print_in_order(node.left)
print(node)
self.print_in_order(node.right)
class Student(object):
def __init__(self, fname, lname, major, age):
self.fname = fname
self.lname = lname
self.major = major
self.age = age
def __repr__(self):
return "%s %s" % (self.fname, self.lname)
def __str__(self):
return "Student name: %s %s. Major's in %s and is %s years old" % (self.fname, self.lname, self.major, self.age)
student1 = Student("Richard", "Nono", "Electrical Engineer", 22)
student2 = Student("Happy", "Tail", "Psychology", 19)
student3 = Student("Honda", "Make", "Mechanical Engineer", 21)
student4 = Student("John", "Ladgo", "Computer Science", 20)
student5 = Student("Remember", "Assignment", "Music", 23)
node1 = Node(student1)
node2 = Node(student2)
node3 = Node(student3)
node4 = Node(student4)
node5 = Node(student5)
bts = Tree()
bts.add_node(bts.root, node1)
bts.add_node(bts.root, node2)
bts.add_node(bts.root, node3)
bts.add_node(bts.root, node4)
bts.add_node(bts.root, node5)
bts.print_in_order(bts.root)