python中的继承(面向对象—类)
面向对象
1、类
class Person(object):
def __init__(self,name,age): #self是实例
'''初始化'''
print('开始执行')
self.name=name
self.age=age
def show(self):
print('he name is {0},and he age is {1}'.format(self.name,self.age))
def __del__(self):
'''清理操作'''
print('执行结束')
obj=Person(name='wuya',age=18)
obj.show()
'''
类属性范畴:
1.属于对象
2.属于类的
类属性它是属于类的
实例属性他是属于类的对象的
那么我们调用类里面的任何方法,首先是对类进行实例化,得到类的对象,然后使用对象调用类里面的方法
'''
- __dict__ : 类的属性(包含一个字典,由类的数据属性组成)
- __doc__ :类的文档字符串
2、单继承:
# 当子类重写父类的方法后,子类实例化后,调用重写的方法,优先考虑的是子类的方法
'''继承里面的第一个原则:'''
# 前提:单继承
# 原则:当实例化类后,子类对象调用的方法和父类里面的方法重名,优先考虑子类的方法
例:
class Person(object): #父类(基类)
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
print('name is {0},and age is {1}'.format(self.name,self.age))
class Work(Person): #子类(派生类)继承父类(基类)
def __init__(self,name,age,salary):
#super()的方法继承父类的实例属性
super().__init__(name,age)
#继承父类
#Person.__init__(self,name,age)和 super().__init__(name,age)效果一样
self.salary=salary
def show(self):
print('name is {0},and age is {1},and salary is {2}'.format(self.name,self.age,self.salary))
objWork=Work(name='lyl',age=18,salary=200.3)
#重新调用子类的show(),因为父类的满足不了子类
objWork.show()

3、多继承
例1:
class Father(object):
def show(self):
print('father show')
class Mother(object):
def show(self):
print('mother show')
'''从左到右的原则:'''
# 前提:子类继承了N个父类,子类没有重写父类的方法
# 执行结果:实话子类后,条用父类的方法,她的查找顺序是从左到右,
# 先到第一个去找,没有找到符合要求的,再接着第二个去找,直到找到符合要求的
class Son(Father,Mother):
pass
son=Son()
son.show()
'''从下到上的原则'''
# 前提:子类继承了N个父类,子类重写了父类的方法
# 执行结果:实例化子类后,调用具体的方法优先考虑子类的方法
class Son(Father,Mother):
# 重写了子类
def show(self):
print('son show')
son=Son()
son.show()

例2:
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
class Student(Person):
def __init__(self,name,age,score):
super().__init__(name,age)
self.score=score
class TestWork(Student):
def __init__(self,name,age,score,salary):
super().__init__(name, age, score)
self.salary=salary
def info(self):
print('name:{0},age:{1},score:{2},salary:{3}'.format(self.name,self.age,self.score,self.salary))
obj=TestWork(name='lyl',age=18,score=90,salary=2000)
#只读
obj.info()

(1)在Python中,基于MRO的解析顺序规则,就会从左到右开始查找基类,如果找到第一个匹配的属性类,就会停止查找,
如果没有,那就继续查找,直到查找到符合要求的为止。MRO其实就是通过一个C3线性化算法来实现的,它的核心思想为:
• 子类会优先于父类检查
• 多个父类会根据它们在列表中的顺序被依次检查
• 如果对下一个类存在两个合法的选择,只能选择第一个
例:
class Person(object):
pass
# def info(self):
# print('a')
#
# def info(self,name):
# print('b',name)
#
# def info(self,name,age):
# print('c',name,age)
class Father(Person):
pass
class Son(Father):
pass
print(Son.mro())
# Son().info(name='lyl',age=18)

4、类实战
import json
import sys
class Actual(object):
def out(self):
username=input('请输入用户名:\n')
password=input('请输入密码:\n')
return username,password
def register(self):
username,password=self.out()
temp=username+'|'+password
#open('param1','param2')
#param1:需要打开的文件,param2:打开文件只读模式(w:可写模式,目标文件为空时,创建新文件)
#json.dump()是将python数据保存成json
json.dump(temp,open('user.md','w'))
def login(self):
username,password=self.out()
#json.load()用于从json文件中读取数据
lists=str(json.load(open('user.md'))).split('|')
if username==lists[0] and password==lists[1]:
return True
else:
print('请检查你的账户或者密码')
def profile(self):
lists=str(json.load(open('user.md'))).split('|')
if self.login():
print('欢迎访问个人主页,我的昵称为{0}'.format(lists[0]))
def main(self):
while True:
try:
f=int(input('1.注册,2.登录,3.查看主页,4.退出\n'))
if f==1:
self.register()
elif f==2:
self.login()
elif f==3:
self.profile()
elif f==4:
break
else:continue
except Exception as e:continue
if __name__ == '__main__':
obj=Actual()
obj.main()
浙公网安备 33010602011771号