python干货整理之__str__

# 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
发布了115 篇原创文章 · 获赞 96 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/qq_26822029/article/details/104018438