Python入门篇之面向对象(4)
实例属性
设置实例的属性可以在实例创建后任意时间进行,也可以在能够访问实例的代码中进行。构造器__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
函数所有的灵活性,比如默认参数,也可以应用到方法中去。在实例化时,可变长度参数也是一个好的特性
__init__()应当返回 None
采用函数操作符调用类对象会创建一个类实例,也就是说这样一种调用过程返回的对象就是实例,下面示例可以看出:
>>> class MyClass(object):
pass
>>> mc = MyClass()
>>> mc
<__main__.MyClass object at 0x0134E610>
如果定义了构造器,它不应当返回任何对象,因为实例对象是自动在实例化调用后返回的。相应地,__init__()就不应当返回任何对象(应当为 None);否则,就可能出现冲突,因为只能返回实例。试着返回非 None 的任何其它对象都会导致 TypeError 异常:
>>> class MyClass:
def __init__(self):
print 'initialized'
return 1
>>> mc = MyClass()
initialized
Traceback (most recent call last):
File "<pyshell#86>", line 1, in <module>
mc = MyClass()
TypeError: __init__() should return None
查看实例属性
内建函数 dir()可以显示类属性,同样还可以打印所有实例属性:
- 上一篇:python3生成随机数实例
- 下一篇:Python入门篇之数字