你已经等了很长时间了, 因为我已经很长一段时间没有谈论这些邓德魔法方法了｡
在这段视频中, 我们将最终揭开它们的秘密｡
现在, 我们可以使用rder方法来查看实例中的方法｡
我们告诉过你这些是从我们的基本对象类继承来的｡
这强调了我们的特殊方法｡
还记得像length这样的东西吗, 比如说, 它可以告诉我们一个数组的长度.
这些实际上是使用这些dunder方法实现的｡
它们允许我们在通过我们的类创建的对象上使用Python特定的函数｡
让我来告诉你我的意思｡
我们要创建一个新类这是一个玩具类.
现在在这里, 我们将定义一个玩具, 并用self初始化它｡
那么我们就说它有颜色和h｡
现在我们说颜色等于颜色｡
所以这些将是我们的属性｡
和H.
太棒了｡
这是我们的班级｡
现在, 假设我们要创建一个动作人物｡
这个动作人物将实例化玩具, 让我们说, 红色和年龄的颜色｡
这是全新的, 所以是零｡
现在如果我用这个对象附带的se tr, 如果我用str或者动作人物｡
点下划线和下划线是这样的｡
我们把这个打印出来｡
我们看到我们得到了这个｡
这和我们做的事情完全一样｡
SDR行动图｡
就像这样｡
你看那个｡
这些双下划线的dunder方法是Python可以识别的特殊方法｡
例如, Dunder STR｡
这个特殊的方法允许我们使用内置的str函数来像这样使用动作人物｡
事实上, 如果你去看Python文档中的特殊方法名部分｡
您将看到, 我们可以对这些dunder方法进行基本的定制｡
这是一个很长的列表, 上面有我们可以使用的所有邓德方法｡
现在就去
别把每一本都读了｡
有很多, 你不会经常使用它们｡
只有特定的少数情况下, 你会使用它们, 想法是知道如何修改它们,
以及它们如何在引擎盖下工作｡
是这样｡
让我们看几个例子｡
例如, 让我们修改SDR的功能｡
我要定义我自己的｡
我是SDR
我要给赛尔打电话｡
然后在这里, 我将返回一些不同的东西｡
我将返回一个SE字符串｡
也就是说, 自学成才的颜色｡
如果我运行这个｡
我脸红了｡
还记得我说过不要修改Dunder方法吗？
好吧, 有时候你可以这么做｡
也许在某些情况下, 特殊的情况下, 你希望你的类以某种方式表现｡
就像字典一样, 列表､ 元组和Python中的所有对象都可以以特定的方式运行｡
如何使用索引号访问列表以及如何使用键访问字典｡
这些都是使用这些标准方法实现的｡
这里你可以看到, 因为我们修改了这个, SDR现在在动作人物上被调用时返回红色｡
它不会改变动作人物以外的东西｡
如果我运行这个, 你会看到它仍然运行这个动作人物｡
因为这是一个字符串｡
SDR仅在我们将其用于此特定对象时被修改｡
就像这样｡
我们还能做些什么呢？
我们也可以改变长度的含义｡
所以长度我可以说自我｡
在这里, 我可以直接返回｡
现在如果我打印｡
动作人物的长度｡
然后单击“Run（运行）”｡
我有五个？
非常酷｡
顺便说一句, 如果这个下划线有点烦人, 坦白说, 对我来说有点烦人,
我会点击这里的设置, 删除代码智能, 这样它就不会告诉我我的代码什么时候出错了,
但希望我们可以自己调试它｡
好了, 我们开始吧｡
我们只是改变了长度｡
邓德返回五｡
我们继续试验吧｡
我们还可以做一些像下划线, 下划线, 删除和删除｡
让我们使用delete关键字, 这是我们以前没见过的｡
删除｡
我们可以直接说“返回”｡
已删除｡
你得这样做, 让我们在这里打印｡
如果单击“运行”, 打印将被删除｡
我看到我退回的内容已删除｡
我还没有教过delete这个关键字, 因为你们不会经常看到它.
通常这会在程序中引起一些有趣的错误, 我个人希望避免这些错误,
但是delete关键字删除了程序中可能存在的某种变量｡
好吧, 还有什么？
让我们改变一下｡
要用一种叫做召唤的东西｡
煤炭是一个有趣的例子｡
假设有了煤, 我们会返回, 让我们说是的｡
问号｡
卡尔的妙处在于, 它给了我们的玩具课一些超能力｡
我们可以说动作人物, 然后说, 好吧, 用call, 我们现在实际上可以用这些括号来调用实际的对象｡
所以使用call, 我有一种特殊的方法来调用一个函数, 顺便说一下,
我们调用函数的方法是使用dunder调用.
如果我单击“运行”｡
我得到了什么？
是的, 我知道
这很酷吧？
好吧, 我会的
最后一个, 因为我想你们开始明白了｡
就像我说的, 这些都在这里｡
通常您不想覆盖它们, 但您只想知道如果您选择, 您是否有能力这样做｡
下一个称为get item｡
那么我们来定义get item｡
同样, 我们将self作为第一个参数, 然后用I表示index, 在这里我们将返回self,
点, 在添加之前, 我们先添加一个属性｡
我要说self dot my dict for my dictionary, 然后添加name｡
等于溜溜球｡
和咱们做养宠物等于假？
现在用这个, 我可以说我的鸡巴｡
并根据我们给予的索引返回项目｡
让我来告诉你我的意思｡
如果我现在做印刷品｡
活动人偶｡
点点｡
在这里, 我们不用点, 而是用方括号, 就像我们访问字典条目一样｡
我们现在可以使用get项, 比如说我们在name中有什么属性？
我们来说说名字, 如果我打印这个循环.
忘了加一个｡
逗号在这里｡
我们再来一次｡
如果我向下滚动, 你可以看到我真的很擅长阅读错误｡
名称名称动作人物未定义, 因为它是动作人物而不是赋格｡
这样好多了
你看那个｡
我的名字｡
Yo Yo能够使用get项使用此括号符号进行访问｡
邓德
非常, 非常酷｡
这些特殊的魔术方法非常有趣, 因为它允许我们对类做一些自定义的修改｡
你也可以理解, 在Python中, 默认类型是如何被构建的, 它们有权限和能力拥有所有这些特殊的语法｡
我们现在也有这种能力｡
让我们休息一下, 做个练习｡