继承,多态,函数案例实战,opp实战,字符串比较

继承

继承的原则
从左到右原则:线性查找的顺序规则,也就是说调用show()方法,如果找到第一个满足的方法,后面继承的类即使有这个方法,也不会调用

前提条件:子类没重写父类的方法



class Father(object):

def __init__(self,salary):
self.salary=salary
@property
def getSalary(self):
return self.salary
def show(self):
print('男人赚钱')
class Mother(object):
def __init__(self,hobby):
self.hobby=hobby
def show(self):
print('女人花钱')
class Son(Father,Mother):
def __init__(self,salary,hobby):
Father.__init__(self,salary)
Mother.__init__(self,hobby)
obj=Son(salary=10,hobby='读书')
obj.show()

obj=Son(salary=10,hobby='读书')
print(Son.mro())

 

 

 
    所以在Python中,基于MRO的解析顺序规则,就会从左到右开始查找基类,如果找到第一个匹配的属性类,就会停止查找,
如果没有,那就继续查找,直到查找到符合要求为止。MRO其实就是通过一个c3线性化算法来实现的,它的核心思想为:

1、子类会优先与父类检查
2、多个父类会根据它们在列表中的顺序被依次检查
3、如果下一个类存在两个合法的选择,只能选择第一个
多态

多态性
多态的优势具体可以总结为如下几点:
1、增加了持续的灵活性
2、增加了持续的额外扩展的功能
Python设计的灵魂:

Python一切皆对象(这个一切指的是变量,函数,类)
'''

name='段舒元'

def func():
print('hello world')

class Peron():
def info(self):
print('this is a method')
obj1=name
obj2=func
print(obj2)
obj3=Peron
print(obj3)
# 主函数: 统一程序执行的入口
if __name__ == '__main__':
func()
obj=Peron()
obj.info()

 


 






class Animal(object):
def talk(self):
print('动物会叫')
class Cat(Animal):
def talk(self):
print('猫也是会叫的')
class Person(Animal):
def talk(self):
print('人也是会叫的')

# animal理解为类实例化后的对象
def func(animal):
animal.talk()
if __name__ == '__main__':
person=Person()
func(animal=person)

 


 class Animal(object):

    def talk(self):
print('动物会叫')
class Cat(Animal):
def talk(self):
print('猫也是会叫的')
class Person(Animal):
def talk(self):
print('人也是会叫的')

# animal理解为类实例化后的对象
def func(animal):
animal.talk()
if __name__ == '__main__':
cat=Cat()
func(animal=cat)

 

 

 

函数案例实战

'''
1、注册
2、登录
3、查看个人主页
4、退出

'''
import sys
import json
def out():
username=input('请输入账号:\n')
password=input('请输入密码:\n')
return username,password
def register():
username,password=out()
temp=username+','+password
json.dump(temp,open('didi.txt','w'))
def login():
username,password=out()
lists=str(json.load(open('didi.txt'))).split(',')
if username==lists[0] and password==lists[1]:
return '恭喜您,登陆成功!'
else:
return'请输入正确的用户名和密码'
def profile():
with open('didi.txt','r') as f:
lists=f.read().split(',')
print('欢迎{0}访问主页'.format(lists[0]))
def exit():
sys.exit(1)
def main():
while True:
try:
f=int(input('1、注册 2、登录 3、主页 4、退出\n'))
if f==1:
register()
elif f==2:
print(login())
elif f==3:
profile()
elif f==4:
exit()
else:continue
except Exception as e:continue

if __name__ == '__main__':
main()

 


 


opp实战

import sys
import json

class Stack(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('didi.txt','w'))
def login(self):
username,password=self.out()
lists=str(json.load(open('didi.txt'))).split(',')
if username==lists[0] and password==lists[1]:
return '恭喜您,登陆成功!'
else:
return'请输入正确的用户名和密码'


def profile(self):
with open('didi.txt','r') as f:
lists=f.read().split(',')
print('欢迎{0}访问主页'.format(lists[0]).replace('"' ,''))


def exit(self):
sys.exit(1)

def main(self):
while True:
try:

f=int(input('1、注册 2、登录 3、主页 4、退出\n'))
if f==1:
self.register()
elif f==2:
print(self.login())
elif f==3:
self.profile()
elif f==4:
exit()
else:continue
except Exception as e:continue

if __name__ == '__main__':
obj=Stack()
obj.main()

 


 

字符串比较
列表推导式

# 列表就是0-10
lists=[x for x in range(10) if x>2]
print(lists)

 


 


字符串比较:
is:比较的是两个对象的内存地址
in:比较的是一个对象是否包含在另外一个对象中
==:比较的是两个对象的内容(但是数据类型必须一致)
# str1='a'
# str2='a'
# if str1 is str2:
# print('内存一致')
# else:
# print(False)

 

 



# str1 = 'a'
# str2 = 'abx'
# if str1 in str2:
# print('str2包含str1')
# else:
# print(False)

 

 



str1 = '1'
str2 = 1
if str1 == str2:
print('str2==str1')
else:
print(False)

 


 



posted @ 2022-04-02 18:45  段舒元  阅读(36)  评论(0编辑  收藏  举报