Python双下划线怎么调用
- 编程知识
- 2023-05-30
- 7
一、__init__方法
在Python中,双下划线的用途很多,其中一个常用的场景就是__init__方法。这个方法在类被实例化的时候自动调用,也就是说它是一个类构造函数。
在__init__方法中,我们可以完成类的初始化操作,例如设置类的属性值。
class Person: def __init__(self, name, age): self.name = name self.age = age p = Person("Tom", 18)
上面的代码中,我们定义了一个Person类,并在__init__方法中初始化了属性name和age。然后我们通过实例化这个类来创建一个具有属性的对象p。
二、__call__方法
另一个常用的双下划线方法是__call__方法。
在Python中,我们可以定义一个可调用对象,这个对象可以像函数一样被调用。如果我们想让一个类实例也成为一个可调用对象,就可以定义__call__方法。
class Adder: def __init__(self): self.sum = 0 def __call__(self, *args): for num in args: self.sum += num return self.sum a = Adder() print(a(1, 2, 3)) # 输出 6
上面的代码中,我们定义了一个Adder类,并在__init__方法中初始化了属性sum。然后我们定义了__call__方法,实现了把类实例当作函数调用的功能。最后我们实例化这个类,并将实例作为函数调用,输出了1+2+3的结果6。
三、__str__方法
有时候我们想要在打印一个对象的时候输出更加有意义的信息,这时就可以使用__str__方法。
__str__方法可以让我们自定义一个类实例的字符串表达形式,使得该类实例在被print时打印出更有意义的信息。
class Book: def __init__(self, title, author, page): self.title = title self.author = author self.page = page def __str__(self): return "{} - {} - {} pages".format(self.title, self.author, self.page) b = Book("Python教程", "Tom", 500) print(b) # 输出 Python教程 - Tom - 500 pages
上面的代码中,我们定义了一个Book类,并在__init__方法中初始化了属性title、author和page。然后我们重写了__str__方法,使得被print的时候能够输出更有意义的信息。最后我们实例化这个类,并打印实例对象b,得到了更有意义的输出。
四、__getattr__方法
有时候我们可能会向一个类中添加一个不存在的属性,这个时候就可以使用__getattr__方法。
__getattr__方法会在属性被访问但是在对象中找不到这个属性的时候触发,可以用来给这个对象动态地添加一个新的属性。
class Dog: def __init__(self, name): self.name = name def __getattr__(self, item): print("给{}添加属性{}".format(self.name, item)) setattr(self, item, "No") return "No" d = Dog("Tom") print(d.happy) # 输出 "给Tom添加属性happy" 和 "No" print(d.happy) # 直接输出 "No"
上面的代码中,我们定义了一个Dog类,并在__init__方法中初始化属性name。然后我们定义了__getattr__方法,每次访问不存在的属性的时候都会调用这个方法。在这个方法中,我们向这个对象动态添加一个新属性,并返回"no"字符串。最后我们实例化一个类,并访问这个类不存在的属性,触发了__getattr__方法,正确地添加了新属性并输出了信息和值。
五、__len__方法
__len__方法是Python内置的双下划线方法之一,用于定义一个类的长度。
在Python中,我们可以通过len()函数获取一个对象的长度,如果想让自定义的对象也能被len()使用,我们就可以在该类中定义__len__方法。
class MyList: def __init__(self, items): self.items = items def __len__(self): return len(self.items) my_list = MyList([1, 2, 3, 4, 5]) print(len(my_list)) # 输出 5
上面的代码中,我们定义了一个自定义的列表MyList,并在__init__方法中初始化了属性items。然后我们在这个类中定义了__len__方法,使得这个自定义的列表也能被len()函数使用。最后我们实例化这个类,并用len()函数获取这个对象的长度,输出了正确的值。