一、函数式编程和面向对象的对比
对比:
函数:定义简单、调用简单
面向对象:定义复杂、调用复杂 好处:归类,将某些类似的函数写在一起
总结:
1.函数式编程可能会比面向对象好
2.python中支持两种编程方式
3.面向对象方式格式:
定义:
class 类名: 定义了一个类
def 函数名(self): 在类中编写了一个“方法”
pass
调用:
x1 = 类名() 创建了一个对象/实例化一个对象
x2.函数名 通过对象调用其中一个方法
class Account: def login(self): name = input("请输入用户名:") pwd = input("请输入密码:") if name == "asd" and pwd == "123": print("登录成功") else: print("登录失败") obj = Account() obj.login()
构造方法:
class Foo: def __init__(self,name): 构造方法,目的进行数据初始化. self.name = name self.age = 18 obj = Foo('asd') 通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可.
应用:
1.将数据封装到对象中,以供自己在方法中调用
2.将数据封装到对象中,以供其他函数调用
二、面向对象代码如何编写
1.规则
class Foo: def __init__(self,name): self.name = name def detail(self,msg): print(self.name,msg) obj = Foo() obj.detail()
2.写法:
方式一:归类+提取公共值
方式二:在指定类中编写和当前类相关的所有代码 + 提取公共值
三、面向对象三大特性:封装、继承、多态
封装:
将相关功能封装到一个类中:
class Message: 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('asd',18,'女')
继承:提供代码重用性
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() # 原则:现在自己类中找,么有就去父类
支持多继承(先找左,再找右)
多态:
多种形态或多种状态
鸭子模式,只要可以嘎嘎加就是鸭子
python原生支持多态,所以没有特殊性