1. 程式人生 > 其它 >繼承,多型,函式案例實戰,opp實戰,字串比較

繼承,多型,函式案例實戰,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)