python __base__等内置方法

本文深入探讨Python中类和实例的属性管理,包括__init__、__str__、__doc__、__dict__等特殊属性的作用及用法,通过实例展示了如何创建类和实例,并演示了类和实例之间的继承关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 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.youkuaiyun.com/mldxs/article/details/8652010

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值