标签:
1. python支持 函数式+面向对象 两种编程
2. 函数式编程,面向对象编程实现:发邮件的功能
函数式:
def mail(email, message):
print(“去发吧”)
return True
# 调用函数
mail("alex3714@126.com", "好人")
面向对象:先创建类,再创建对象
# 创建类
class Foo:
# 方法(函数放在类里)
def mail(self, email, message):
print(“去发吧”)
return True
# 调用
# 1.创建对象,类名()
obj = Foo()
# 2.通过对象去执行方法
obj.mail("alex3714@126.com", "好人")
3. 类和对象
a) 创建类
class 类名 def 方法名(self, xxxx) pass
b) 创建对象
对象 = 类名()
c) 通过对象执行方法
对象.方法名(123)
4. 数据库示例
函数式
def fetch(host, username, password, sql):
pass
def create(host, username, password, sql):
pass
def remove(host, username, password, nid):
pass
def modify(host, username, password, name):
pass
面向对象1
class SQLHelper:
def fetch(self, host, username, password, sql):
pass
def create(self, host, username, password, sql):
pass
def remove(self, host, username, password, nid):
pass
def modify(self, host, username, password, name):
pass
obj = SQLHelper()
面向对象2
class SQLHelper:
def fetch(self, sql):
# 连接数据库
print(self.hhost)
print(self.uusername)
print(self.pwd)
print(sql)
def create(self, sql):
pass
def remove(self, nid):
pass
def modify(self, name):
pass
obj = SQLHelper()
obj.hhost = "c1.salt.com"
obj.uusername = "alex"
obj.pwd = "123"
obj.fetch("select * from A")
1. 类和对象的创建与执行
# 创建类 class 类名: def 方法名(self, xxxx): pass # 创建对象 对象 = 类名() # 通过对象执行方法 对象.方法名(123)
2. 什么时候用面向对象
当某一些函数具有参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可。
self是一个Python自动会给传值的参数
哪个对象执行方法,self就是谁。
obj1.fetch("select * from A") self == obj1
obj2.fetch("select * from A") self ==obj2
类中有一个特殊的方法__init__,类()自动被执行
class SQLHelper:
# 构造方法__init__,a1,a2,a3为参数,接收对象参数
def __init__(self, a1, a2, a3):
print("自动执行init")
self.hhost = a1
self.uusername = a2
self.pwd =a3
def fetch(self, sql):
pass
def create(self, sql):
pass
def remove(self, nid):
pass
def modify(self, name):
pass
# 对象,对象参数
obj1 = SQLHelper("c1.salt.com", ‘alex‘, ‘123‘)
# 执行对象
obj1.fetch("select * from A")
面向对象三大特性:封装、继承、多态
封装:初级
class Person:
def __init__(self, name, age, money):
self.name = name
self.age = age
self.money = money
def shopping(self):
self.money = self.money - 2
long = Person(‘龙‘, 18, -1)
hu = Person(‘虎‘, 18, 2)
bao = Person(‘豹‘, 18, 10)
bao.shopping()
print(bao.money)
封装对象
class c1:
def __init__(self, name, obj):
self.name = name
self.obj = obj
class c2:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
print(self.name)
# 创建对象c2_obj,参数
c2_obj = c2(‘aa‘, 11)
# 创建对象c1,参数2为对象c2_obj,c2_obj的name,age
c1_obj = c1("alex", c2_obj)
# c1_obj里的obj下的age
print(c1_obj.obj.age, c1_obj.obj.name, c1_obj.name)
封装:终级
class c1:
def __init__(self, name, obj):
self.name = name
self.obj = obj
class c2:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
print(self.name)
class c3:
def __init__(self, a1):
self.money = 123
self.aaa = a1
c2_obj = c2(‘c2‘, 11)
# c2_obj是c2类型
# - name = "aa"
# - age = 11
c1_obj = c1("c1", c2_obj)
# c1_obj是c1类型
# - name = "c1"
# - obj = c2_obj
c3_obj = c3(c1_obj)
print(c3_obj.aaa.obj.name)
# 使用c2_obj执行show方法
c3_obj.aaa.obj.show()
# print(c3.aaa)
Python可以多继承
单继承练习1:
class F1: # 父类,基类
def show(self):
print("show")
def foo(self):
print(self.name)
class F2(F1): # 子类,派生类
def __init__(self, name):
self.name = name
def bar(self):
print(‘bar‘)
def show(self): # 父类与子类都有的函数,优先执行子类本地
print(‘F2.show‘)
obj = F2(‘alex‘)
obj.show()
obj.foo()
单继承练习2:
class S1:
def F1(self):
self.F2()
def F2(self):
pass
class S2(S1):
def F3(self):
self.F1()
def F2(self):
pass
obj = S2()
obj.F3()
# 执行结果:S2的F2
obj = S1()
obj.F1()
# 执行结果:S1的F2
小结:只要出现self,就回到原点从下向上查找
多继承练习1:简单格式
class C1:
def f1(self):
print("C1 f1")
pass
class C2:
def f2(self):
print("C2 f2")
pass
class C3(C2,C1):
def f3(self):
print("C3 f3")
pass
obj = C3()
obj.f3()1
obj.f2()
obj.f1()
# 输出结果
C3 f3
C2 f2
C1 f1
多继承:多层父类
class C0():
def f2(self):
print("C0.f2")
class C1(C0):
def f1(self):
print("C1.f1")
pass
class C2:
def f2(self):
print("C2.f2")
pass
class C3(C1,C2):
def f3(self):
print("C3.f3")
pass
obj = C3()
obj.f2()
# 输出结果
C0.f2
class C0():
def f2(self):
print("C0.f2")
class C1(C0):
def f1(self):
print("C1.f1")
pass
class C2:
def f2(self):
print("C2.f2")
pass
class C3(C2,C1):
def f3(self):
print("C3.f3")
pass
obj = C3()
obj.f2()
小结:
多继承如有多层父类,且顶级类不唯一时,查找顺序为从左向右,由下至上。
有共同顶级父类时查找顺序
class C_2():
def f2(self):
print("C_2.f2")
class C_1(C_2):
def f1(self):
print("C_1.f1")
class C0(C_2):
def f1(self):
print("C0.f1")
class C1(C0):
def f1(self):
print("C1.f1")
pass
class C2(C_1):
def f2(self):
print("C2.f2")
pass
class C3(C1,C2):
def f3(self):
print("C3.f3")
pass
obj = C3()
obj.f2()
# 输出结果
c2.f2

标签:
原文地址:http://www.cnblogs.com/liangdalong/p/5602227.html