python_day24_class_类_继承

#-----------------继承(儿子继承父亲的东西,但是不一定全部继承),二级继承--------------------#
# class Father:
# def basketball(self):
# pass
# def soccer(self):
# pass
# class son(Father): #为son这个类指定继承的类Father,称son为子类,Father为父类。或称son为派生类,Father为基类
# def table(self):
# pass
# s=son()
# s.soccer()

#-----------------继承(儿子继承父亲,父亲继承爷爷),三级继承--------------------#
# class Grandfather:
# def tennis(self):
# pass
# class Father(Grandfather):
# def basketball(self):
# pass
# def soccer(self):
# pass
# class son(Father): #为son这个类指定继承的类Father,称son为子类,Father为父类。或称son为派生类,Father为基类
# def table(self):
# pass
# s=son()
# s.tennis() #孙子继承爷爷的对象
# s.soccer() #儿子继承父亲的对象

#-----------------继承,实例--------------------#
# class F:
# def f1(self): #第116行
# print('F.f1')
#
# def f2(self): #如果不想让s去继承这个对象,那么在s这个类中也构造一个f2对象即可,在自己里面找到类,就肯定不去别人那里找了
# print('F.f2')
# class s(F):
# def s1(self): #第122行
# print('s.s1')
# obj = s()
# obj.s1() #这一句去执行的时候,此时第122行的s1中的self是形参,代之obj
# obj.f1() #哪个对象去调用,self就代之那个,第116行的self也代之obj。 self永远指代调用方法的调用者,此时f1是调用方法,obj是调用者


#-----------------继承,既执行父类的foo()方法,也执行子类中的foo()方法--------------------# *****
# class F: #父类
# def f1(self): #第116行
# print('F.f1')
#
# def f2(self): #如果不想让s去继承这个对象,那么在s这个类中也构造一个f2对象即可,在自己里面找到类,就肯定不去别人那里找了
# print('F.f2')
# class s(F): #子类
# def s1(self): #第122行
# print('s.s1')
# super(s,self).f2() #找到父级的类,再找到父级这得方法f2(),其中super的第一个参数必须为子类的类名,第二个参数均为self
# #super(s,self).f2()也有执行父类这得f2()方法的作用,用下main这一句也可以代替上一句
# F.f2(self) #这一句可以代替上一句,功能一样的但是必须有形参self,但是推荐用super()
# obj = s()
# obj.s1() #这一句去执行的时候,会执行子类中的s1()方法,也会去执行父类中的f2()方法,所以最后先打印s.s1 再打印F.f2
#以上的具体实际应用:父类中的f1和f2方法可以是别人写的函数,自己拿过来调用,而子类这的s1方法是自己写的函数
#这子类中添加父类的方法,这样这执行的时候,这样就可以不破坏别人代码的基础上去执行别人的代码,也可以执行自己的代码


# #-------------------多继承-----------------------#
# class F1:
# def a(self):
# print('F1,a')
# class F2:
# def a(self):
# print('F2.a')
# class S(F1,F2): #类既继承F1也继承F2,最左边的具有最高的优先级,优先被调用
# pass
# obj = S()
# obj.a() #打印F1,a

#-------------------两个类中含有相同的方法(函数),去执行的顺序-----------------------#
# class BaseHandler:
# pass
# class RequestHandler(BaseHandler):
# def sever_forever(self):
# print('RequestHandler.sever_forever')
# self.process_request() #第166行,这里的self就是obj,obj又是son这个类的方法,所以执行这一句时候,
# # son会首先去自己类里面的方法,去找有没有process_request(),如果没有再去son继承的父类中去找process_request()
# #而son继承了Minx类,Minx中正好有process_request()这个方法,所以第166行会去Minx中去执行process_request()方法
# def process_request(self):
# print('RequestHandler.process_request')
# class Minx:
# def process_request(self):
# print('Minx.process_request')
# class son(Minx,RequestHandler):
# def a(self):
# print('F2.a')
#
# obj = son()
# obj.sever_forever() #打印 RequestHandler.sever_forever和Minx.process_request

#-------------------两个类中含有__init___(self)方法-----------------------#
class BaseHandler:
def __init__(self):
print('BaseHandler.__init__')
class RequestHandler(BaseHandler): #RequestHandler去继承BaseHandler
def __init__(self):
print('RequestHandler.__init__')
#BaseHandler.__init__(self) #加上这一句也会去执行aseHandler.__init__(self)方法,勿忘加self
def sever_forever(self):
print('RequestHandler.sever_forever')
self.process_request()
def process_request(self):
print('RequestHandler.process_request')
class Minx:
def process_request(self):
print('Minx.process_request')
class son(Minx,RequestHandler):
def a(self):
print('F2.a')
obj = son() #打印RequestHandler.__init__。这一句只执行RequestHandler中的__init__()方法,其余RequestHandler中的方法不再执行
#上一句执行时会首先去找son类中有没有__init__()方法,
# 发现在son内没有,在Minx内也没有,而在另一个父类RequestHandler中有__init__()方法,所以就会首先去
# 执行RequestHandler中的__init__()方法,而RequestHandler的父类中BaseHandler也有__init__()方法,但不再去执行
#除非在RequestHandler中的__init__(self)方法中有Base.__init__(self)或者super(RequestHandler,self).__init__()语句

obj.sever_forever() #打印 RequestHandler.sever_forever和Minx.process_request
#-------------------类中的方法调用时,别的函数是否也会被调用的问题,答案是不会执行。。。-----------------------#
class RequestHandler(BaseHandler):  #RequestHandler去继承BaseHandler
def __init__(self):
print('RequestHandler.__init__')
def sever_forever(self):
print('RequestHandler.sever_forever')
self.process_request()
def process_request(self):
print('RequestHandler.process_request')
obj = RequestHandler()  #打印RequestHandler.__init__ 这一句只执行RequestHandler中的__init__()方法,其余RequestHandler中方法不再执行           
obj.server_forever() #打印 RequestHandler.sever_forever和RequestHandler.process_request
#上一句只执行server_forever()
obj.process_request() #这一句就只执行process_request()这一个方法了

今天给我的台式机换了win10系统,感觉会是一个新的开始吧
hiajing in HZ
2018.10.24




















原文地址:https://www.cnblogs.com/YiYA-blog/p/9844297.html