元组中有8种特殊方法,它们不是从object和type继承的

时间:2018-09-07 03:59:57

标签: python python-3.x

当我检查元组类型的特殊方法

In [114]: [m for m in dir(tuple) if m.startswith("__")]
Out[114]: 
['__add__',
 '__class__',
 '__contains__',
 '__delattr__',
 '__dir__',

我发现有些dudermethods既不继承自object也不继承自type

In [115]: meta_methods = set(dir(object)) | set(dir(type))
In [116]: len(meta_methods)
Out[116]: 43

In [117]: [m for m in dir(tuple) if m not in meta_methods]
Out[117]: 
['__add__',
 '__contains__',
 '__getitem__',
 '__getnewargs__',
 '__iter__',
 '__len__',
 '__mul__',
 '__rmul__',
 'count',
 'index']

有8种特殊方法,它们不是从objecttype继承的。

这些方法来自哪里?

1 个答案:

答案 0 :(得分:2)

如果我给你看了这堂课:

class Foo:
    def this_is_a_method(self):
        print('tacos')

或者可能是此类:

class Underscores:
    def __this_is_a_method_with_underscores__(self):
        print("It's just a method.")
    def __len__(self):
        return 12

您会惊讶于它有objecttype没有的方法吗?

tuple相同。 tuple有其自己的方法。这是类可以做的事情-它们可以有自己的方法。并非所有方法都必须来自objecttype。这是类系统中非常普通的部分。