面向对象之基本概念 封装、单多继承
面向对象:类,对象
函数写在类里面,一定要加self
例:
class foo:
# 函数在类里面-->方法
def mail(self, email, message):
return Ture
# 调用
# 1. 创建对象,类名(),例如:obj = foo()
# 2. 通过对象去执行方法,例如:obj.mail()
类和对象
- 创建类
class 类名:
def 方法名(self,xxxx):
pass
- 创建对象
对象 = 类名() - 通过对象执行方法
对象.方法名() - 对象是由类创建的,对象执行方法,根据类对象指针进入对象找到方法
- self怎么理解
self是一个python会自动传递的参数
哪个对象执行方法,self就是谁 - 构造方法
类中有一个特殊的方法__init__,类()-->类名加括号<--自动被执行 - 面向对象三大特性
封装,继承,多态- 封装在对象里面,如模拟人生设计中,人物基本信息(姓名、年纪等)封装在self中。
- 多态在python中用不到
6--实例
class SQLHelper:
def __init__(self, a1, a2, a3):
print("自动执行init")
# 以下进行封装
self.hhost = a1
self.uusername = a2
self.pwd = a3
def fetch(self, sql):
pass
def crear(self, sql):
pass
def remove(self, id):
pass
def modify(self, name):
pass
# obj1 = SQLHelper() # 加括号自动执行__init__方法,同时self为obj1
obj1 = SQLHelper("a.com", "jack", 123) # 进行self封装 构造了方法,创建对象的过程--利用__init__构造方法
obj1.fetch("select xxxx") # 进行调用
# obj2 = SQLHelper() # 加括号自动执行__init__方法,同时self为obj2
什么时候用面向对象
当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可。
在类中,无上下顺序,可以提点调用
7--多层封装实例:
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)
return 123
class c3:
def __init__(self, a1):
self.money = 123
self.aaa = a1
c2_obj = c2('aa', 11)
# c2_obj是c2类型 封装了 name age
# - name = "aa"
# - age = 11
c1_obj = c1("alex", c2_obj)
# c1_obj.obj.name-->c2中的年纪 就是c1_obj.obj==c2_obj
# c1_obj 是c1 类型
# - name = "alex"
# - obj = c2_obj
c3_obj = c3(c1_obj)
# 使用c3_obj执行show方法
ret = c3_obj.aaa.obj.show()
print(ret)
多层封装实例图解如下:
继承实例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() # 打印出alex 继承父类的方法,相当于父类的方法写入子类中
继承实例2:
面向对象之多继承
左侧优先级高于右边,从左侧逐渐向父类查找,找到底再从右侧寻找
多继承实例:
寻找方法 都是从自己先查找,首先查找init方法
例子: