您的位置:首页 > 编程语言 > Python开发

python __base__等内置方法

new_abc 2015-08-29 20:52 141 查看
# coding=utf-8_
_author__ = "leaves"

class Base(object):
    a = 0

    def __init__(self):
        self._a = 10
        pass

class Child(Base):
    "测试测试"
    _b = 10

    def __str__(self):
        print "My Name is Child"

class Child2(Child, Base):  # (Child,Base)顺序不能反
    "测试测试"
    _b = 10

child = Child()
child2 = Child2()
print isinstance(child, Child)
print isinstance(child, Base)
print issubclass(Child, Base)
print child.__class__  # 告诉某个实例对象是哪个类
print child.__module__  # 模块名称
print Child.__module__
print child.__doc__
print child.__dict__  # 显示的是child这个实例的属性,用self修饰的属性
print Child.__dict__  # 显示的是Child这个类的属性
print Base.__dict__
print Child.mro()
print Base.mro()
print child.__class__.__mro__  # 解析方法调用的顺序。super的执行路径和类的__mro__列举的类顺序吻合
print child2.__class__.__mro__
print child.__class__.__base__  # 列出其直接基类
print child2.__class__.__base__
print child.__class__.__bases__  # 列出其除object的所有基类
print child2.__class__.__bases__
print child.__str__()
# 如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"。
print child2.__class__.__name__
print __name__


输出:

True
True
True
<class '__main__.Child'>
__main__
__main__
测试测试
{'_a': 10}
{'__module__': '__main__', '_b': 10, '__str__': <function __str__ at 0x000000000256F048>, '__doc__': '\xe6\xb5\x8b\xe8\xaf\x95\xe6\xb5\x8b\xe8\xaf\x95'}
{'a': 0, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Base' objects>, '__weakref__': <attribute '__weakref__' of 'Base' objects>, '__doc__': None, '__init__': <function __init__ at 0x0000000002520F98>}
[<class '__main__.Child'>, <class '__main__.Base'>, <type 'object'>]
[<class '__main__.Base'>, <type 'object'>]
(<class '__main__.Child'>, <class '__main__.Base'>, <type 'object'>)
(<class '__main__.Child2'>, <class '__main__.Child'>, <class '__main__.Base'>, <type 'object'>)
<class '__main__.Base'>
<class '__main__.Child'>
(<class '__main__.Base'>,)
(<class '__main__.Child'>, <class '__main__.Base'>)
My Name is Child
None
Child2
__main__


2.1.模块(module)

__doc__: 文档字符串。如果模块没有文档,这个值是None。

*__name__: 始终是定义时的模块名;即使你使用import.. as 为它取了别名,或是赋值给了另一个变量名。

*__dict__: 包含了模块里可用的属性名 - 属性的字典;也就是可以使用模块名.属性名访问的对象。

__file__: 包含了该模块的文件路径。需要注意的是内建的模块没有这个属性,访问它会抛出异常!

2.2.类(class )

__doc__: 文档字符串

。如果类没有文档,这个值是None。

*__name__: 始终是定义时的类名。

*__dict__: 包含了类里可用的属性名 - 属性的字典;也就是可以使用类名.属性名访问的对象。

__module__: 包含该类的定义的模块名;需要注意,是字符串形式的模块名而不是模块对象。

*__bases__: 直接父类对象的元组;但不包含继承树更上层的其他类,比如父类的父类。

2.3.实例(instance)

实例是指类实例化以后的对象。

*__dict__: 包含了可用的属性名 - 属性字典。

*__class__: 该实例的类对象。对于类Cat,cat.__class__ == Cat



True

2.4.内建函数和方法(built - in functions and methods)

  根据定义,内建的(built - in)

模块是指使用C写的模块,可以通过sys模块的builtin_module_names字段查看都有哪些模块是内建的。这些模块中的函数和方法可以使用的属性比较少,不过一般也不需要在代码中查看它们的信息。

__doc__: 函数或方法的文档。

__name__: 函数或方法定义时的名字。

__self__: 仅方法可用,如果是绑定的(bound),则指向调用该方法的类(如果是类方法)或实例(如果是实例方法),否则为None。

*__module__: 函数或方法所在的模块名。

2.5.函数(function)

  这里特指非内建的函数。注意,在类中使用def定义的是方法,方法与函数虽然有相似的行为,但它们是不同的概念。

__doc__: 函数的文档;另外也可以用属性名func_doc。

__name__: 函数定义时的函数名;另外也可以用属性名func_name。

*__module__: 包含该函数定义的模块名;同样注意,是模块名而不是模块对象。

*__dict__: 函数的可用属性;另外也可以用属性名func_dict。

2.6. 方法(method)

  方法虽然不是函数,但可以理解为在函数外面加了一层外壳;拿到方法里实际的函数以后,就可以使用2.5节的属性了。

__doc__: 与函数相同。

__name__: 与函数相同。

*__module__: 与函数相同。

参考:
http://blog.csdn.net/mldxs/article/details/8652010
标签: