码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象(一)

时间:2016-06-25 12:13:49      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

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


2、函数式编程,面向对象编程实现:发送邮件的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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、类和对象

1
2
3
4
5
6
7
8
9
10
a. 创建类
    class 类名:
     
        def 方法名(self,xxxx):
            pass
b. 创建对象
    对象= 类名()
     
c.通过对象执行方法
    对象.方法名(123)

4、举例:函数式编程与面向对象编程分别实现mysql增删改查


函数式:
1
2
3
4
5
6
7
8
def fetch(host, username, password, sql):
    pass
def create(host, username, password, sql):
    pass
def remove(host, username, password, sql):
    pass
def modify(host, username, password, sql):
    pass

函数式编程可以看出,没定义一个功能,就需要输入一遍mysql的登录信息(user,host,pass等)


面向对象:
1
2
3
4
5
6
7
8
9
10
11
12
13
class SQLHelper:
 
    def fetch(self, host, username, password, sql):
        pass
    def create(self, host, username, password, sql):
        pass
    def remove(self, host, username, password, sql):
        pass
    def modify(self, host, username, password, sql):
        pass
         
obj = SQLHelper()
obj.fetch()
如果按照以上的代码,面向对象编程也需要,每个功能都输入一遍连接信息,是否有什么方法把连接
信息放到一处,可以让其他动能都使用呢?
对象是由类创建的,对象执行方法的时候是根据类对象指针去找到对应类然后执行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class SQLHelper:
 
    def fetch(self, sql):
        pass
    def create(self, sql):
        pass
    def remove(self, sql):
        pass
    def modify(self, sql):
        pass
         
obj = SQLHelper()      
obj.hhost = "c1.salt.com"    #执行这个,可以在类中定义hhost = "c1.salt.com"
obj.uusername = "alex"       #同上
obj.pwd = "123"              #同上
 
obj.fetch(......)
通过以上代码的方法,就可以省略每个功能都定义host、name、pass代码
当我们调用obj.fetch("select * from table")时,python会把select * from table语句传给fetch(sql),此时
obj中封存着hhost,uusername,pwd等变量,python就会把obj这个对象传给fetch中的self。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class SQLHelper:
    def fetch(self, sql):
        print(self.hhost, sql)
        print(self.uusername, sql)
        print(self.pwd, sql)
 
    def create(self, sql):
        pass
 
    def remove(self, sql):
        pass
 
    def modify(self, sql):
        pass
 
obj = SQLHelper()
obj.hhost = "c1.salt.com"
obj.uusername = "alex"
obj.pwd = "123"
 
obj.fetch("select biubiubiu")
执行结果:
c1.salt.com select biubiubiu
alex select biubiubiu
123 select biubiubiu
把obj传给self,此时self就等于obj。
因此,self.hhost self.uusername的值就等于定义的boj.hhost的值。
面向对象的编程可以把某些数据封装一次,多处调用,不用功每次都定义,方便很多。

什么时候用面向对象?

当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可。

self是什么鬼?

self是一个python自动会给传值的参数
哪个对象执行方法,self就是谁。
1
2
3
4
obj2.fetch(‘select....‘)    self=obj2
 
obj1.fetch(‘select....‘)    self=obj1

构造方法:

1
2
3
4
5
class dididi():
    def __init__(self):
        print("自动执行init")
    
obj = dididi()
当定义class时,定义对象时就会自动执行一个__init__方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class SQLHelper:
 
    def __init__(self, a1, a2, a3):
        self.hhost = a1
        self.uusername = a2
        self.pwd = a3
 
    def fetch(self, sql):
        pass
 
    def create(self, sql):
        pass
 
    def remove(self, sql):
        pass
 
    def modify(self, sql):
        pass
 
obj1 = SQLHelper(‘c1.salt.com‘, ‘didi‘, 123)
obj1.fetch(‘select * from A‘)
只写一行,就可以把sql连接信息传入__init__中,以后执行各种方法就可以调用了。
类中的方法是没有先后顺序的,随时可以调用。


对象中封装对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class c1:
 
    def __init__(self, name, obj):
        self.name = name
        self.obj = obj
 
class c2:
 
    def __init__(self, name, obj):
        self.name = name
        self.obj = obj
 
    def show(self):
        print(self.name)
 
class c3:
    def __init__(self, money, a1):
        self.money = 123
        self.aaa = a1
 
c2_obj = c2(‘aa‘, 11)
 
c1_obj = c1(‘bb‘, c2.obj)
 
c1_obj.obj   #此时c1_obj.obj  就是c2.obj的值
 
c3_obj = c3(c1_obj)
 
print(c3.aaa)
#如果要求c2_obj的name就是c3_obj.aaa.obj.name













面向对象(一)

标签:

原文地址:http://www.cnblogs.com/yangruizeng/p/5616113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!