函数式编程和面向对象的对比 函数: 定义简单/调用简单 面向对象: 定义复杂/调用复杂 好处:归类,将某些类似的函数写在一起 面向对象代码如何编写 class Foo: def __init__(self,name): self.nam
函数: 定义简单/调用简单
面向对象: 定义复杂/调用复杂 好处:归类,将某些类似的函数写在一起
def __init__(self,name):
self.name = name
def detail(self,msg):
print(self.name,msg)
obj = Foo()
obj.detail()
可以先归类,再提取公共值到构造方法中
#归类class File:
def file_read(self,file_path):
pass
def file_update(self,file_path):
pass
def file_delete(self,file_path):
pass
#提取公共值
class File:
def __init__(self,file_path):
self.file_path = file_path #各方法中的公共值放入__init__方法中,避免重复写
def file_read(self):
pass
def file_update(self,file_path):
pass
def file_delete(self,file_path):
pass
(1)封装
将相关功能(不同方法)封装到一个类中,
def email(self):pass
def msg(self):pass
def wechat(self):pass
将数据封装到一个对象中:
class Person:def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
obj = Person('孙福来',18,'女')
(2)继承
class SuperBase:def f3(self):
print('f3')
class Base(SuperBase): # 父类,基类
def f2(self):
print('f2')
class Foo(Base): # 子类,派生类
def f1(self):
print('f1')
obj = Foo()
obj.f1()
obj.f2()
obj.f3()
# 原则:现在自己类中找,没有就去父类
支持多继承(一般先找左/再找右),多继承遵守C3算法,多继承的目的是提高代码重用性,在找继承关系的时候,在类中self是谁的对象,从谁开始找
(3)多态
多种形态或多种状态
鸭子模型,只要可以嘎嘎叫就是鸭子.
# 由于python原生支持多态,所以没有特殊性.
class Foo1:
def f1(self):
pass
class Foo2:
def f1(self):
pass
class Foo3:
def f1(self):
pass
def func(arg): #参数arg是一个对象,随便传入一个对象,只要有f1方法即可
arg.f1()
obj = Foo1() # obj= Foo2() obj = Foo3()
func(obj)