- 1.
_metaclass_=type#确定使用新式类,不用担心,Python3.0以后旧式类不存在了
class Filter:
def init(self):
self.block=[]
def filter(self,sequence):
return [x for x in sequence if x not in self.block]
class SPAMFilter(Filter):
def init(self):
self.block=['SPAM']
使用SPAMFilter作为Filter的子类,通过重写init函数,来过滤掉’SPAM’。
>>> f=SPAMFilter()
>>> f.init()
>>> f.filter(['SPAM','!!!','SPAM','LALA','SPAM'])
['!!!', 'LALA']
- 2.
_metaclass_=type#确定使用新式类,不用担心,Python3.0以后旧式类不存在了
class Calculator:
def calculate(self,expression):
self.value=eval(expression)
class Talker:
def talk(self):
print 'Hi, my value is',self.value
class TalkingCalculator(Calculator,Talker):
pass
多重继承的简单例子。
>>> tc=TalkingCalculator()
>>> tc.calculate('1+3*2')
>>> tc.talk
<bound method TalkingCalculator.talk of <__main__.TalkingCalculator instance at 0x06485F30>>
>>> tc.talk()
Hi, my value is 7
- 3.
_metaclass_=type#确定使用新式类,不用担心,Python3.0以后旧式类不存在了
class MuffledCalculator:
muffled=False
def calc(self,expr):
try:
return eval(expr)
except ZeroDivisionError:
if self.muffled:
print 'Division by zero is illegal'
else:
raise
这里捕获了异常,并且给了一个打开和关闭屏蔽异常的开关。
>>> calcutor=MuffledCalculator()
>>> calcutor.calc('10/0')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:/Users/50258/.spyder2/.temp.py", line 15, in calc
return eval(expr)
File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>> calcutor.muffled=True
>>> calcutor.calc('10/0')
Division by zero is illegal
- 4.
try:
x=input('Please input first number:')
y=input('Please input second number:')
print x/y
except ZeroDivisionError:
print 'The second is zero!'
except NameError:
print 'Type wrong!'
多条Except语句。
Please input first number:1
Please input second number:s
Type wrong!
- 5.
try:
x=input('Please input first number:')
y=input('Please input second number:')
print x/y
except (ZeroDivisionError,NameError),e:
print e
一个块捕捉多个异常,并通过e打印出来。Python3.0使用”except (ZeroDivisionError,NameError) as e”
>>> runfile('C:/Users/50258/.spyder2/.temp.py', wdir=r'C:/Users/50258/.spyder2')
Please input first number:s
name 's' is not defined
>>> runfile('C:/Users/50258/.spyder2/.temp.py', wdir=r'C:/Users/50258/.spyder2')
Please input first number:10
Please input second number:0
integer division or modulo by zero
- 6.
while True:
try:
x=input('Please input first number:')
y=input('Please input second number:')
print x/y
except Exception,e:
print 'Invalid input:',e
print 'Inpur again'
else:
break
简单的循环输入,直到符合条件计算出结果。
Please input first number:5
Please input second number:0
Invalid input: integer division or modulo by zero
Inpur again
Please input first number:2
Please input second number:s
Invalid input: name 's' is not defined
Inpur again
Please input first number:3
Please input second number:4
0