类的特殊成员

Posted AlamZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的特殊成员相关的知识,希望对你有一定的参考价值。

上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段、方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用。无论人或事物往往都有不按套路出牌的情况,Python的类成员也是如此,存在着一些具有特殊含义的成员,详情如下:

1. __doc__

  表示类的描述信息

class Foo:
    """ 描述类信息,这是用于看片的神奇 """
    def func(self):
        pass
print Foo.__doc__ #输出:类的描述信息

2.. __init__

  构造方法,通过类创建对象时,自动触发执行。

class Foo:
    def __init__(self, name):
        self.name = name
        self.age = 18

obj = Foo(\'wupeiqi\') # 自动执行类中的 __init__ 方法

3. __call__

  对象后面加括号,触发执行。

注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

class Foo:
    def __init__(self):
        pass
    
    def __call__(self, *args, **kwargs):
        print \'__call__\'

obj = Foo() # 执行 __init__
obj()       # 执行 __call__

4. __dict__

  类或对象中的所有成员

上文中我们知道:类的普通字段属于对象;类中的静态字段和方法等属于类,即:

class Province:

    country = \'China\'

    def __init__(self, name, count):
        self.name = name
        self.count = count

    def func(self, *args, **kwargs):
        print \'func\'

# 获取类的成员,即:静态字段、方法、
print Province.__dict__
# 输出:{\'country\': \'China\', \'__module__\': \'__main__\', \'func\': <function func at 0x10be30f50>, \'__init__\': <function __init__ at 0x10be30ed8>, \'__doc__\': None}

obj1 = Province(\'HeBei\',10000)
print obj1.__dict__
# 获取 对象obj1 的成员
# 输出:{\'count\': 10000, \'name\': \'HeBei\'}

obj2 = Province(\'HeNan\', 3888)
print obj2.__dict__
# 获取 对象obj1 的成员
# 输出:{\'count\': 3888, \'name\': \'HeNan\'}
print obj2.__dict__[\'name\']
# 输出:HeNan

5. __str__

  如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

class Foo:
    def __str__(self):
        return \'wupeiqi\'

obj = Foo()
print obj
# 输出:wupeiqi

 

以上是关于类的特殊成员的主要内容,如果未能解决你的问题,请参考以下文章

Python学习:17.Python面向对象(属性(特性),成员修饰符,类的特殊成员)

面向对象day08:类的特殊成员-类的起源与metaclass

类的特殊成员

Python面向对象--类的特殊成员方法

Python 类的特殊成员方法

Python基础到进阶类的特殊成员(__xxx__)