Python魔法方法(9):__dir__(self) 方法

Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,它们是面向对象的 Python 的一切。它们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了某一个魔法方法,那么这个方法就会在特殊的情况下自动被 Python 所调用。

功能

定义对象被 dir() 函数调用时的行为。

参数

self 表示对象本身。

返回值

一个可迭代对象。

示例:

class MyTest(object):

    def __init__(self):
        self.name = '阿珍'
        self.age = 18

    def __dir__(self) -> 'Iterable[str]':
        dic = self.__dict__.copy()
        if 'name' in dic:
            dic.pop('name')
        return dic


sample = MyTest()
print(dir(sample))
class CLanguage:
    def __init__(self, ):
        self.name = "C语言中文网"
        self.add = "http://c.biancheng.net"

    def say(self):
        pass


clangs = CLanguage()
print(dir(clangs))

通过 dir() 函数,不仅仅输出本类中新添加的属性名和方法(最后 3 个),还会输出从父类(这里为 object 类)继承得到的属性名和方法名。

dir() 函数的内部实现,其实是在调用参数对象 __dir__() 方法的基础上,对该方法返回的属性名和方法名做了排序。
所以,除了使用 dir() 函数,可以自行调用该对象具有的 __dir__() 方法:

class CLanguage:
    def __init__(self, ):
        self.name = "C语言中文网"
        self.add = "http://c.biancheng.net"

    def say(self):
        pass


clangs = CLanguage()
print(clangs.__dir__())

使用 __dir__() 方法和 dir() 函数输出的数据是相同,仅仅顺序不同。

猜你喜欢

转载自blog.csdn.net/youzhouliu/article/details/125382753