您的位置:首页 > 编程语言 > Python开发

Python面向对象编程(一)

2016-08-05 17:38 471 查看
第1个:面向对象基础

1、python 支持 函数式 + 面向对象 编程

2、函数式编程实现发送邮件功能

def mail (mail,message):
print ("发送")
return True

mail("lalala", "好")
-------------------------------
面向对象:类,对象
#创建类
class foo:
#方法
def mail (self,mail,message):
print ("发送")
return True
#创建对象
obj = foo()
#通过对象执行方法
obj.mail("lalala", "好")


第2个:面向对象编程和函数式编程对比

创建类,类里边是方法
创建对象
对象调用类里的方法

函数式:

def fetch(host,usernam,password,sql):
pass
def create(host,usernam,password,sql):
pass
def remove(host,usernam,password,sql):
pass
remove(127.0.0.1,sa,sa,select * from user;)


面向对象:

class sqlhelp:
def fetch(self,host,usernam,password,sql):
pass
def create(self,host,usernam,password,sql):
pass
def remove(self,host,usernam,password,sql):
pass
obj = sqlhelp()
obj.fetch(.......)
--------------------------------------------
class sqlhelp:
def fetch(self,sql):
pass
def create(self,sql):
pass
def remove(self,sql):
pass
obj = sqlhelp()
#把host,usernam,pwd封装到对象里
obj.host="127.0.0.1"
obj.usernam="lala"
obj.pwd="lalala"

obj.fetch("select * from user")
!#方法中的self就相当于obj定义的host,usernam,pwd三个值


什么时候用面向对象?
有共同的参数,且将参数值一次性封装到对象,以后在对象中取值

第3个:面向对象中对象和类的关系

self是什么鬼?
self是一个python自动会给传值的参数

那个对象执行方法,self就是谁!

第4个:面向对象之构造方法

class sqlhelp:

def __init__(self):
print("自动执行init")

def fetch(self,sql):
pass

obj = sqlhelp()  #创建对象=类名() ,在方法中自动执行一个init函数
-------------------------------------------
class sqlhelp:

def __init__(self,a1,a2,a3):
print("自动执行init")
self.host=a1
self.user=a2
self.pwd=a3

def fetch(self,sql):
pass

obj = sqlhelp("xietong.live","sa","123456")
obj.fetch("select * from user")


类中有一个特殊的方法init,类() 自动被执行。
init方法为 构造方法!

第5个:面向对象之应用场景实例

class person:
def __init__(self,name,age,money):
self.name=name
self.age=age
self.money=money

def shop(self):
self.money=self.money-2

la= person("hk",26,1000)
la.shop()
print(la.money)


面向对象三大特性:封装、继承、多态(python没有意义)
上边的例子为特性之一的:封装。

第6个:面向对象之对象中封装对象

自带类:str,list,dict,tuple,set
自定义类:
class foo:
def bar(self):
pass

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("aa",11)
print(c2_obj.name)
print(c2_obj.age)
c1_obj = c1("kk",c2_obj)
print(c1_obj.name)
print(c1_obj.obj.age) #c1_obj.obj = c2_obj


第7,8个:面向对象之对象中封装对象2,3

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,money,aaa):
self.money = money
self.aaa= c1_obj

c2_obj = c2("aa",11)
print(c2_obj.name)
print(c2_obj.age)

c1_obj = c1("kk",c2_obj)
print(c1_obj.name)
print(c1_obj.obj.age) #c1_obj.obj = c2_obj

c3_obj = c3(1000,c1_obj)
print(c3_obj.aaa.obj.name) #c3_obj.aaa = c1_obj
#c3_obj.aaa.obj = c2_obj
#c2_obj.name = a
print(c3_obj.aaa.obj.show()) #返回为None,因为方法中没有返回值


第9,10个:面向对象之单继承

1、可以多继承。

2、继承是把上边的东西拿下来。

3、如果本类中存在,自己的优先执行。

class f1: #父类、基类
  def show(self):
3     print("show")
  def foo(self):
    print(self.name)
class f2(f1): #子类、派生类
7   def __init__(self,name):
    self.name = name

  def bar(self):
    print("bar")

  def show(self):
    print("f2show")

obj=f2("alex")
obj.foo()
#print(obj.show())


----------------------------------
重要!阅读源码会经常用到。

class s1:
  def f1(self):
    self.f2()
  def f2(self):
    pass

class s2(s1):
  def f3(self):
    self.f1()
'''
def f1(self):
self.f2() #拷贝的s1里的f1.self等于obj=s2,执行自己的f2
'''
  def f2(self):
    print(123)

#obj = s1()
#obj.f1() #执行s1里的f1、f2

obj = s2()
obj.f3() #执行s2里的f3,把s1里的f1拿下来了,再执行本类中的f2,输出结果为123


第11,12个:面向对象之多继承

class c0():
  def f2(self):
    print(12)

class c1(c0):
  def f0(self):
    print(123)

class c2():
  def f2(self):
    print("c2")

class c3(c1,c2): #继承关系左边的优先级高
  def f3(self):
    print(67)

obj = c3()
obj.f2()




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: