特殊方法
特殊方法能让徽章自己回应 print 和 len。第一个程序里,print(guest) 会在屏幕上写出 badge mira,这是 str 在运行。你不用自己写 guest.str(),有 print(guest) 就够了。名字 mira 存在一个 Badge 里,没有安装任何包,也没有创建任何文件夹。写下 Badge("mira") 时会运行 init,self 就是这枚徽章。str 返回的是那串文字,把它显示到屏幕上的是 print。badge 和 mira 之间只有一个空格。
class Badge:
def __init__(self, name):
self.name = name
def __str__(self):
return "badge " + self.name
guest = Badge("mira")
print(guest)
屏幕上只有一行:badge mira。存下来的名字是 mira,前面的 badge 是 str 加上去的,真正写出这一行的是 print。如果程序里没有 print,屏幕就会是空的,因为返回这些文字并不等于把它们写出来。程序里也没有 guest.str(),有 print(guest) 就足够运行它。没有 str 的徽章不会写出 badge mira,那一行会给出类的名字和内存中的一个位置。None 不会被写出。
class Badge:
def __init__(self, name):
self.name = name
def __len__(self):
return len(self.name)
guest = Badge("mira")
print(len(guest))
第二个程序是独立的,它的屏幕上是整数 4,不是 badge mira,也不是 mira。它定义了 len,返回 len(self.name),print(len(guest)) 写出 4。mira 有四个字母:m、i、r、a,所以结果是 4,没有小数点,存下来的名字里也没有空格。这个程序没有定义 str,因此不会写出 badge mira。如果缺少 len,程序会停住,这次停住叫 TypeError。None 不会被写出,程序也不会往下走。那一行出错的代码并不在程序里。
📊 写什么,出什么
| 你写的代码 | 屏幕上的结果 |
|---|---|
| print(guest) | badge mira |
| print(len(guest)) | 4 |
| 没有 __len__ 时的 len(guest) | 程序会停住 |
下一页会把一个对象放进另一个对象里。这一页只在名叫 mira 的一枚徽章上展示两个特殊方法。
一枚徽章,两种回应
print(guest) 写出 badge mira,因为运行了 str;print(len(guest)) 写出 4,因为运行了 len,而 4 正是 mira 的字母个数。这两个特殊名字后面不用你再单独加括号。下一页会把一个对象放进另一个对象里。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部