正在加载...

特殊方法

特殊方法能让徽章自己回应 print 和 len。第一个程序里,print(guest) 会在屏幕上写出 badge mira,这是 str 在运行。你不用自己写 guest.str(),有 print(guest) 就够了。名字 mira 存在一个 Badge 里,没有安装任何包,也没有创建任何文件夹。写下 Badge("mira") 时会运行 init,self 就是这枚徽章。str 返回的是那串文字,把它显示到屏幕上的是 print。badge 和 mira 之间只有一个空格。

print 运行 __str__

python
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 不会被写出。

len 运行 __len__

python
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 的字母个数。这两个特殊名字后面不用你再单独加括号。下一页会把一个对象放进另一个对象里。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
5
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部