Python程序设计案例课堂
上QQ阅读APP看书,第一时间看更新

6.3 类的构造方法和内置属性

所谓构造方法就是创建对象时,对象本身所运行的函数。Python使用__init__()函数作为对象的构造方法。当用户要在对象内指向对象本身时,可以使用self关键字。Python的self关键字与C++的this关键字一样,都是代表对象本身。

下列案例创建一个简单的类,在类定义内设置类的对象的构造方法是打印对象本身:

        >>> class myClass:
            def __init__(self):
                print (self)

        >>> myClass
        < <class '__main__.myClass'>

def __init__(self)语句定义myClass类的构造方法,self是必要的参数且为第一个参数。用户可以在__init__()构造方法内加入许多参数,在创建类时同时设置类的属性值。

【案例6-1】创建类的构造方法(代码6.1.py)。

        #类定义
        class car:
            #定义基本属性
            name = ' '
            brand= ' '
            #定义私有属性,私有属性在类外部无法直接进行访问
            __price= 0
            #定义构造方法
            def __init__(self, n, b, p):
              self.name = n
              self.brand = b
              self.__price = p
            def  explain (self):
              print("%s属于 %d系列的轿车。" %(self.name, self.brand))
        # 实例化类
        c = car(’英朗’, ’别克’,130000)
        c.explain ()

保存并运行程序,结果如下:

        C:\Users\Administrator>python d:\python\ch06\6.1.py
        英朗属于别克系列的轿车。

在本案例中,定义了一个car类,其基本属性为name和brand,私有属性为__price,接着定义了构造方法def __init__(self,n,b,p):、主要作用是对基本属性和私有属性进行赋值操作。

所有Python的类都具有下列内置属性。

(1)classname.__dict__:类内的属性是以字典对象的方式存储。__dict__属性为此字典对象的值。例如:

        >>> class myClass:
            "这是一个定义类的例子"
            a = 123

        >>> myClass.__dict__
        mappingproxy({'__weakref__': <attribute '__weakref__' of 'myClass' objects>,
        '__module__': '__main__', '__init__': <function myClass.__init__ at
        0x02D79BB8>, '__dict__': <attribute '__dict__' of 'myClass' objects>,
        '__doc__': None})

(2)classname.__doc__:__doc__属性返回此类的文件字符串。例如:

        >>>class myClass:
          "这是一个定义类的例子"
          a = 123

        >>>myClass.__doc__
        '这是一个定义类的例子’

(3)classname.__name__:__name__属性返回此类的名称。例如:

        >>> class myClass:
          "这是一个定义类的例子"
            a = 123

        >>> myClass.__name__
        'myClass'

(4)classname.__module__:__module__属性返回包含此类的模块名称。例如:

        >>> class myClass:
        ...  "这是一个定义类的例子"
        ...  a = 123
        ...
        >>> myClass.__module__
        '__main__'

(5)classname.__bases__:__bases__属性是一个tuple对象,返回此类的基类名称。例如:

        >>> class myClass:
          "这是一个定义类的例子"
          a = 123

        >>> myClass.__bases__
        (<class 'object'>, )
        >>> class a(myClass):
          "A derived class"
          b = 100

        >>> a.__bases__
        (<class '__main__.myClass'>, )