zoukankan      html  css  js  c++  java
  • Python __dir__()用法:列出对象的所有属性(方法)名

    前面在介绍 Python 内置函数时,提到了 dir() 函数,通过此函数可以某个对象拥有的所有的属性名和方法名,该函数会返回一个包含有所有属性名和方法名的有序列表。
    举个例子:

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

    程序运行结果为:

    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'add', 'name', 'say']

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

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

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

    程序运行结果为:

    ['name', 'add', '__module__', '__init__', 'say', '__dict__', '__weakref__', '__doc__', '__repr__', '__hash__', '__str__', '__getattribute__', '__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__new__', '__reduce_ex__', '__reduce__', '__subclasshook__', '__init_subclass__', '__format__', '__sizeof__', '__dir__', '__class__']

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

    天道酬勤 循序渐进 技压群雄
  • 相关阅读:
    方法的封装与调用(十)
    适配器设计模式及GenericServlet(九)
    错误页设置,设置HTTP状态码404,500(八)
    设置默认首页(七)
    ServletContext接口(六)
    javax.servlet.ServletConfig接口(五)
    C语言第2天基本运算
    再议extern和include的作用
    C语言中的++和--
    C语言培训第一天
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/15034928.html
Copyright © 2011-2022 走看看