一、类实战
class Person(object):
city="西安"
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
print('my name is {0},and my age is {1},and my city is {2}'.format(self.name,self.age,self.city))
@property
def info(self):
"""只读属性"""
print('特性方法')
@staticmethod
def jing():
print('静态方法')
@classmethod
def admin(cls):
print('类方法')
# obj=Person(name='chen',age=10)
# obj.show()
# obj.info
# Person(name='chen',age=10).jing()
# Person(name='chen',age=10).admin()
执行以上代码,结果为

2、登陆实战
class login(object):
def __init__(self,username,password):
self.username=username
self.password=password
def login(self,nick):
if self.username=='chen' and self.password=='xin':
print('我的昵称是:{0}'.format(nick))
return 'asdf'
else:
print('账户密码错误')
def Profile(self,token):
if token=='asdf':
print('登陆成功')
else:
print('请登录')
def func(self,*args,**kwargs):
print(args,kwargs)
objLogin=login(username='chen',password='xin')
objLogin.Profile(token=objLogin.login(nick='陈'))
objLogin.func(name='chen',nick='asd',age=2321,address='beijing')
"""
java是单继承
python是多继承
"""
执行以上代码,结果为

3、单继承,方法重写
"""
父类:基类
子类:派生类
"""
class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
print('name is {0},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)
self.salary=salary
#方法重写
def show(self):
print('我的名字:{0},年龄:455,薪资:234.4'.format(self.name,self.age,self.salary))
objWork=Work(name='chen',age=199,salary=123.33)
objWork.show()
"""
当子类重写了父类的方法后,子类实例化后,调用重写的方法,优先考虑的是子类的方法
继承里面的第一个原则:
前提:单继承
原则:当实例化子类后,子类对象调用的方法和父类里面的方法重名,优先考虑子类的方法
执行以上代码,结果为

4、多继承
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 TextWork(Student):
def __init__(self,name,age,score,salary):
super().__init__(name,age,score)
self.salary=salary
def info(self):
print('名字:{0},年龄:{1},分数:{2},薪资:{3}'.format(self.name,self.age,self.score,self.salary))
obj=TextWork(name='chen',age=123,score=56,salary=21312.3)
obj.info()
执行以上代码,结果为:

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

6、登陆实战
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
json.dump(temp,open('123.tet','w'))
def login(self):
username,password=self.out()
lists=str(json.load(open('123.tet'))).split('|')
if username==lists[0] and password==lists[1]:
return True
else:
print('请检查账户或密码')
def profile(self):
lists=str(json.load(open('123.tet'))).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号