上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'>, )