面向对象1

1.函数式编程和面向对象的对比

  开发一个消息提醒的功能(邮件/短信/微信)


函数:

  

 1 def mail(em,text):
 2     """
 3     发送邮件
 4     :return:
 5     """
 6     print(em,text)
 7 
 8 def msg(tel,text):
 9     """
10     发送短信
11     :return:
12     """
13     print(tel,text)
14 
15 def wechat(num,text):
16     """
17     发送微信
18     :return:
19     """
20     print(num,text)
21 
22 编写功能:
23     if 条件:
24         email('xxx','xxx')
25         msg('xxx','xxx')
26         wechat('xxx','xxx')

面向对象:

  

 1 class Message:
 2     def mail(self,em,text):
 3         """
 4         发送邮件
 5         :return:
 6         """
 7         print(em,text)
 8 
 9     def msg(self,tel,text):
10         """
11         发送短信
12         :return:
13         """ 
14         print(tel,text)
15 
16     def wechat(self,num,text):
17         """
18         发送微信
19         :return:
20         """
21         print(num,text)
22 
23 编写功能:
24     if 条件:
25         obj = Message()
26         obj.email('xxx','xxx')
27         obj.msg('xxx','xxx')
28         obj.wechat('xxx','xxx')

对比:

  函数:定义简单/调用简单

  面向对象:定义复杂/调用复杂  好处:可以将某些类似的函数写在一起

总结:

  1.函数式编程可能会比面向对象好

  2.Python中支持两种编程方式

  3.面向对象方式的格式:

    定义:

      class 类名:

        def 函数名(self):

          pass

    调用:

      x = 类名()

      x.函数名()

    示例:

 1 class Account:
 2     def login(self):
 3         user = input("请输入用户名:")
 4         pwd = input("请输入密码:")
 5         if user == 'abc' and pwd = '123':
 6             print("登录成功")
 7         else:
 8             print("登录失败")
 9 obj = Account()
10 obj.login()

  4.构造方法:

    

1 class Foo:
2     def __init__(self,name):#构造方法,目的进行数据初始化
3         self.name = name
4         self.age = 18
5 obj = Foo('abc') 
6 
7 #通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可 
8   

  5.应用:

    a.将数据封装到对象中,以供自己在方法中调用

  

 1 class FileHandler:
 2     def __init__(self,file_path):
 3         self.file_path = file_path
 4         self.f = open(self.file_path,"rb")
 5 
 6     def read_first(self):
 7         self.f.read()
 8         ...
 9         
10     def read_last(self):
11         self.read()
12         ...
13 
14 obj = FileHandler(path)
15 obj.read_first()
16 obj.read_last()

    b.将数据封装到对象中,以供其他函数调用

 1 def new_func(arg):
 2     arg.k1
 3     arg.k2
 4     arg.k3
 5 
 6 class Foo:
 7     def __init__(self,k1,k2,k3):
 8         self.k1 = k1
 9         self.k2 = k2
10         self.k3 = k3
11 
12 obj = Foo(11,22,33)
13 new_func(obj)

2.面向对象代码如何编写

  1.规则

    

1 class Foo:
2     def __init__(self,name):
3         self.name = name
4     
5     def detail(self,name):
6         print(self.name)
7 
8 obj = Foo()
9 obj.detail()

  2.什么时候写,如何写

    a.归类+提取公共值

      归类:

 1 class File:
 2     def file_read(self,file_path):
 3         pass
 4     
 5     def file_update(self,file_path):
 6         pass
 7     
 8     def file_delete(self,file_path):
 9         pass
10 
11 class Excel:
12     def excel_read(self,file_path):
13         pass
14     
15     def excel_update(self,file_path):
16         pass
17 
18     def excel_delete(self,file_path):
19         pass
20     
21     def excel_add(self,file_path):
22         pass

    提取公共值:

 1 class File:
 2     def __init__(self,file_path):
 3         self.file_path = file_path
 4     
 5     def file_read(self):
 6         pass
 7 
 8     def file_update(self):
 9         pass
10 
11     def file_delete(self):
12         pass
13 
14     def file_add(self):
15         pass
16 
17 class Excel:
18     def __init__(self,file_path):
19         self.file_path = file_path
20 
21     def excel_read(self):
22         pass
23     
24     def excel_update(self):
25         pass
26 
27     def excel_delete(self):
28         pass
29 
30     def excel_add(self):
31         pass

    b.在指定类中编写和当前类相关的所有代码 + 提取公共值

 1 class Person:
 2     def __init__(self,na,gen,age,fig):
 3         self.name = na
 4         self.gender = gen
 5         self.age = age
 6         self.fight = fig
 7 
 8     def grassland(self):
 9         self.fight = self.fight -10
10        
11     def practice(self):
12         self.fight = self.fight + 90
13         
14     def incest(self):
15         self.fight = self.fight  - 100
16 
17 a = Person('abc','',18,1000)
18 d = Person('def','',20,1000)
19 q = Person('qwe','',22,1000)
20 
21 d.grassland()

3.面向对象的三大特性:封装/继承/多态

  封装:将相关功能封装到一个类中

    

1 class Message:
2     def email(self):pass
3     def msg(self):pass
4     def wechat(self):pass

  将数据封装到一个对象中:

  

1 class Person:
2     def __init__(self,name,age,gender):
3         self.name = name
4         self.age = age
5         self.gender = gender
6 
7 obj = Person("abc",18,"")

  继承:

  

 1 def SuperBase:
 2     def f3(self):
 3         print('f3')
 4 
 5     class Base(SuperBase):
 6         def f2(self):
 7             print("f2")
 8     class Foo(Base):
 9         def f1(self):
10             print("f1")
11 
12 obj = Foo()
13 obj.f1()
14 obj.f2()
15 obj.f3()
16 
17 #原则:先在自己类中找,诶呦就去父类找

总结:

  1.继承编写

  2.支持多继承(先找左,再找右)

  3.为什么要有多继承?提供代码重用性

  

  多态:多种形态。在面向对象语言中,接口的多种不同的实现方式即为多态。

原文地址:https://www.cnblogs.com/s593941/p/9544525.html