PYTHON编程
本文探讨了在Python类中使用repr()和str()的不同方面
Python类有多个面孔。例如,您可以创建一个空类:
class MyClass: pass
它仍然可以派上用场,例如作为哨兵值。您可以添加一个__init__()方法:
class MyClass: def __init__(self, value): self.value = value
这仍然是一个非常简单的类,但是这次它将保持一个特定的值。
Python类的一大优势是它们可以用作类型,如下所示:
def foo(x: MyClass, n: int) -> list[MyClass]: return [x] * n
请记住,不实现__init__()方法并不意味着它不存在。实际上,我们在上面重载了__init__()方法,而不仅仅是实现它。这是Python类的另一个重要方面,您应该知道:您可以重载许多其他方法,例如__new__()、__eq__()和__setattr__()。如果您不重载这些方法,某些方法将具有默认实现(如__init__()、__new__()、__setattr__()和__eq__()),而其他方法则不会(如__lt__()和除__eq__()、__getitem__()、__setitem__()和__len__()之外的所有其他比较方法)。
一个类可以继承另一个类,如下所示:
class MyClass(dict): @staticmethod def say_hello(self): print("你好!")
就像上面一样,它可以使用静态方法,但也可以使用类方法。您可以创建混入类、抽象基类、单例模式和许多其他有用的东西。
Python类有如此多的面貌,以至于讨论每一个细节需要花费多年的时间,而我们将在未来的文章中逐一介绍。在本文中,我们将重点讨论一个特定的方面:__repr__()和__str__()方法之间的差异和功能。
乍一看,您可能会认为这是一个次要的主题,但实际上它非常重要。实现一个Python类很容易,但要实现一个良好的…