㈠ python面向对象编程中的f.init()什么意思,为什么要加这一个
f.init()加在中间是为了类Filter定义一个属性blocked并初始化,因为它定义了类的属性blocked,而类Filter的函数filter中要用到这个属性,所以不加f.init()会报错.
同样的s.init(),SPAMFilter子类重写了Filter父类的init函数,并且重新定义了属性blocked,而子类SPAMFilter继承的父类Filter的函数filter中用到了这个属性,所以不加s.init()也会报错.
完整的Python程序如下
class Filter:
def init(self):
self.blocked=[]
def filter(self,sequence):
return [x for x in sequence if x not in self.blocked]
class SPAMFilter(Filter):
def init(self):
self.blocked=['SPAM']
f=Filter()
f.init()
print(f.filter([1,2,3]))
s=SPAMFilter()
s.init()
print(s.filter(['SPAM','SPAM','SPAM','SPAM','eggs','bacon','SPAM']))
源代码(注意源代码的缩进)
㈡ python中,面向对象有哪些机制有利于代码复用
Python中面向对象编程有以下机制有利于代码复用:
1.继承(Inheritance):子类可以继承父类的属性和方法,并且可以在不改变父类的情况下对其进行扩展或修改,从而减少代码的重复编写。例如,一个父类定义了通用的方法,子类可以继承这些方法并添加特定的实现。
在这个例子中,我们定义了一个抽象基类 Animal,它有一个抽象方法 make_sound,用于定义动物的叫声。然后我们定义了两个子类 Dog 和 Cat,它们芹者分别实现了 make_sound 方法,以定义狗和猫的叫声。由于它们都实现了 Animal 类的接口,所以它们有相同的行为,我们可以使用相同的方式对它们进行操作。