一、面向對象簡介 1、面向對象不是所有的情況都適用2、面向對象編程 a.定義類 class 類名: def 方法1(self, 參數名): 方法體 b.根據類創建對象,使用對象去執行類中的方法 obj = 類名() obj.方法名3、self,形參,python內部傳遞 4、函數式編程與面向對象式編 ...
一、面向對象簡介
1、面向對象不是所有的情況都適用
2、面向對象編程
a.定義類
class 類名:
def 方法1(self, 參數名):
方法體
b.根據類創建對象,使用對象去執行類中的方法
obj = 類名()
obj.方法名
3、self,形參,python內部傳遞
4、函數式編程與面向對象式編程的區別
示例:
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 面向對象編程初識 """ #先定義一個類 class Hello(): #定義一個方法 def sayHell(self, name): print('歡迎您!' + name) #創建一個對象 obj = Hello() obj.sayHell('yusheng_liang')
二、面向對象--封裝
應用場景:
1、當同一類型的方法具有相同參數時,直接封裝到對象即可
2、把類當做模板,創建多個對象(對象內封裝的數據可以不一樣)
3、類名+括弧
自動執行類中的__init__方法:創建了一個對象
在__init__方法中執行具體封裝的操作
__init__有一個特殊名字:構造方法(初始化)
示例一:面向對象之封裝,非主流的方式
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 封裝,非主流的方式 """ class Foo(): def add_foo(self): print(self.name) #列印已經封裝好的對象屬性 def del_foo(self): print(self.name) #創建一個對象 obj1 = Foo() #在對象中封裝數據 obj1.name = 'yusheng_liang' #執行方法,執行過程中可以根據self去obj1中取已經封裝在裡面的數據 obj1.add_foo()
示例二:面向對象之封裝,使用構造方法的方式封裝數據
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 封裝,使用構造方法的方式封裝數據 """ class Foo(): def __init__(self, args): """ 構造方法 :param args: """ self.name = args def add_foo(self): print(self.name) #列印已經封裝好的對象屬性 def del_foo(self): print(self.name) #創建一個對象,實例,並且將yusheng_liang封裝到對象中 obj1 = Foo('yusheng_liang') # #在對象中封裝數據 # obj1.name = 'yusheng_liang' #執行方法,執行過程中可以根據self去obj1中取已經封裝在裡面的數據 obj1.add_foo()
三、面向對象--繼承
1、派生類可以繼承基類中所有的功能
2、派生類和基類同時存在相同的功能時,優先找派生類的
3、python類可以同時繼承多個類(C#/java不可以),用逗號隔開,優先找自己的功能,再在繼承類中從左到右的順序查找功能
4、多繼承時的查找順序如下:
示例:
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 面向對象之繼承 """ #定義一個父類,又叫基類 class Animals: def say(self): print('Hello, I am saying') def run(self): print('I am running') #定義子類,又叫派生類,在括弧中寫上父類名 class Cat(Animals): def __init__(self, name): self.name = name def sing(self): print(self.name + ' 喵喵喵') #定義子類,又叫派生類,在括弧中寫上父類名 class Dog(Animals): def __init__(self, name): self.name = name def sing(self): print(self.name + ' 汪汪汪') cat1= Cat('小貓咪') cat1.sing() cat1.say() dog1 = Dog('小狗狗') dog1.sing() dog1.run()
示例結果:
四、面向對象--多態,多種形態
python本身支持多態
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 多態 """ class Foo: def f1(self): print('Foo') class Bar: def f1(self): print('Bar') def func(arg): print(arg) func(Foo()) func(Bar())