继承和多态——调用 init new call 方法的示例

继承,,,, 

1
class Animal(object): 2 def run(self): 3 print(self.__name__,'is running....') 4 class Dog(Animal): 5 def run(self): 6 print(' dog is running....') 7 8 class Cat(Animal): 9 def run(self): 10 print('cat is running....') 11 12 def run_tunce(animal): 13 animal.run() 14 15 run_tunce(Dog())

 

 


调用 init new call 方法的示例

1
class a(object): 2 def __init__(self,*args): 3 self.name=args 4 print(self.name) 5 def __new__(cls, *args, **kwargs): 6 print('2',args,kwargs) 7 return super(a,cls).__new__(cls) 8 def __call__(self, name): 9 print("3",name) 10 def b_v(self): 11 print('b',self.name[0]) 12 a1=a('liu') 13 a1.b_v() 14 a1('jie')

#子类在重写__new__()函数时,写return时必须返回有继承关系的类的__new__()函数调用

#__new__()函数确定了类的参数的个数,object类默认定义的__new__()函数的参数为(cls, *more),但如果在子类中重写了__new__(cls, x),
则实例化类时,需要传入一个x参数,而__init__()函数接受到的有两个参数,一个是实例化生成的实例对象self代替,一个是传入的实参x的值

 #__new__()方法的特性:
     __new__()方法是在类准备将自身实例化时调用。
     __new__()方法始终都是类的静态方法,即使没有被加上静态方法装饰器。是因为无论怎样重写类的__new__()函数,追溯到源头都是继承自object的__new__()函数,
      而object类中定义的__new__()函数就被定义成了静态函数,被@stacitmethod修饰

 

posted @ 2018-08-08 17:50  Sky__liu  阅读(133)  评论(0)    收藏  举报