python干货整理之__str__
# Python干货整理之__str____str__是Python中类对象自带的一个函数(通过其名字也能看出来,和__self__类似),那么它有什么作用呢?首先敲出下面的代码运行一下看看结果是什么:class Person(object):def __init__(self, name = 'tom', age = 10):self.name = name...
·
# Python干货整理之__str__
__str__是Python中类对象自带的一个函数(通过其名字也能看出来,和__self__类似),那么它有什么作用呢?首先敲出下面的代码运行一下看看结果是什么:
class Person(object):
def __init__(self, name = 'tom', age = 10):
self.name = name
self.age = age
self.parent = None
tom = Person()
print(tom)
# 唔,在我这里输出了个看起来像是地址的东西
# >>> <__main__.Person object at 0x00000244B4A2EA90>
所以当我们打印一个实例化对象时,打印的其实是这个对象的地址。而通过自定义__str__()函数就可以帮助我们打印对象中相关的内容。
class Person(object):
def __init__(self, name = 'tom', age = 10):
self.name = name
self.age = age
self.parent = None
def __str__(self):
return "Your name is: " + self.name
tom = Person()
print(tom)
# 唔,果然输出了我们自定义的内容
# >>> Your name is: tom
总结:在python中调用print()打印实例化对象时会调用__str__()函数,如果__str__()中有返回值,就会打印其中的返回值。
这个用法我是在刷题的时候看到的,来都来了那就赏你一道算法题吧,顺便体会一下__str__函数的用途。
"""
Given a number n, generate all binary search trees that can be constructed with nodes 1 to n.
"""
# answer
class Node:
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
def __str__(self):
result = str(self.value)
if self.left:
result = result + str(self.left)
if self.right:
result = result + str(self.right)
return result
def helper(low, high):
if low == high:
return [None]
result = []
for i in range(low, high):
left = helper(low, i)
right = helper(i + 1, high)
for l in left:
for r in right:
result.append(Node(i, l, r))
return result
def generate_bst(n):
# Fill this in.
return helper(1, n + 1)
for tree in generate_bst(4):
print(tree)
# Pre-order traversals of binary trees from 1 to n.
# 123
# 132
# 213
# 312
# 321
# 1 1 2 3 3
# \ \ / \ / /
# 2 3 1 3 1 2
# \ / \ /
# 3 2 2 1
更多推荐
已为社区贡献2条内容
所有评论(0)