Python入门篇之面向对象

2019-10-05 15:43:57王旭

 

>>> class instCt(object):
    count = 0
    def __init__(self):
        instCt.count += 1
    def __del__(self):
        instCt.count -= 1
    def howMany(self):
        return instCt.count
   
>>> a = instCt()
>>> b = instCt()
>>> b.howMany()
2
>>> a.howMany()
2
>>> del b
>>> a.howMany()
1
>>> del a
>>> instCt.count
0

实例属性
 
设置实例的属性可以在实例创建后任意时间进行,也可以在能够访问实例的代码中进行。构造器__init()__是设置这些属性的关键点之一
 
能够在“运行时”创建实例属性,是 Python 类的优秀特性之一,Python 不仅是动态类型,而且在运行时,允许这些对象属性的动态创建。这种特性让人爱不释
手。当然,创建这样的属性时,必须谨慎。一个缺陷是,属性在条件语句中创建,如果该条件语句块并未被执行,属性也就不存在,而你在后面的代码中试着去访问这些属性,就会有错误发生。
 
默认参数提供默认的实例安装
在实际应用中,带默认参数的__init__()提供一个有效的方式来初始化实例。在很多情况下,默认值表示设置实例属性的最常见的情况,如果提供了默认值,我们就没必要显式给构造器传值了。
 

>> class HotelRoomCalc(object):
    'hotel room rate calculate'
    def __init__(self, rt, sales = 0.085, rm = 0.1):
        '''HotelRoomCalc default arguments:
                 sales tax == 8.5% and room tax == 10%'''
        self.salesTax = sales
        self.roomTax = rm
        self.roomRate = rt
    def calcTotal(self, days = 1):
        'Calculate total: default to daily rate'
        daily = round((self.roomRate * 14 * (1+self.roomTax + self.salesTax)),2)
        return float(days) * daily

>>> sfo = HotelRoomCalc(299)
>>> sfo.calcTotal()
4960.41
>>> sfo.calcTotal(2)
9920.82
>>> sea = HotelRoomCalc(189, 0.086, 0.085)
>>> sea.calcTotal()
3098.47
>>> sea.calcTotal(4)
12393.88

函数所有的灵活性,比如默认参数,也可以应用到方法中去。在实例化时,可变长度参数也是一个好的特性