本篇我们继续学习面向对象相关内容,今天说下魔术方法(面试基础有可能被问到),关注龙哥AI大模型,让我们一起进步 魔术方法是Python中以双下划线开头和结尾的特殊方法。它们不需要你手动调用,但是需要定义,在特定情况下自动触发。最常见的例子就是__init__魔术方法主要给创建的对象做初始化的。
class Dog: def __init__(self, name): # 这是魔术方法 self.name = name# 创建对象时,__init__ 自动执行my_dog = Dog("旺财") # 不需要写 my_dog.__init__("旺财")
class Person(object): # 这是一个魔法函数: (不需要你调用.系统会在合适的时候自动调用.[你得定义]) def __init__(self,name,age): self.name = name self.age = age# 测试我们的类有没有属性..# p1 = Person() # TypeError: __init__() missing 2 required positional arguments: 'name' and 'age'p2 = Person('小伟',29)print(p2.name)print(p2.age)#-------------------------------------p3 = Person('小杰',21)print(p3.name)print(p3.age)
# 加算器类class Adder(object): def __init__(self, value=0): self.data = value # 调用对象的默认函数() def __call__(self, x): print("call执行.....") return self.data + x# 创建计算器对象add = Adder(10)#使用计算器print(add(1)) # 11 通过对象名(参数)语法形式 默认就会调用__call__方法print(add(2)) # 12
class Dog: def __init__(self, name): self.name = name def __str__(self): return f"一只叫{self.name}的狗"my_dog = Dog("旺财")print(my_dog) # 打印对象名会自动调用__str__方法输出:一只叫旺财的狗
Python的魔术方法很多,大致了解若干就可以,下面列举一些,有大致印象就行class Quick: def __init__(self, name): # 1.初始化 self.name = name def __str__(self): # 2.print显示 return self.name def __len__(self): # 3.len() return len(self.name) def __getitem__(self, i): # 4.下标和遍历 return self.name[i] def __call__(self, x): # 5.函数调用 return f"{self.name}{x}"q = Quick("Tom")print(q) # Tomprint(len(q)) # 3print(q[1]) # ofor c in q: # 能遍历 print(c)print(q("Hi"))# Tom Hi
掌握这几个足够开发或基础面试了,希望这篇文章对你有帮助!欢迎留言交流。