zoukankan      html  css  js  c++  java
  • day 22 面向对象的基础

    面向对象:

    1、简述编写和执行类中的方法的流程

    class Foo:             #类的编写
        def func():
            print("我爱你")
    obj = Foo()            #类的调用和执行
    obj.func()
    

    2、面向对象的三大特征?
      封装、继承、多态

      封装:

        归类将相关的功能封装到一个类中、

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

      继承:

        自己没有找老爸要

        当有两个类或者多个类,其中都有共同的方法时,为了避免代码重复编写,把它放到父亲中

      多态:

        python原生支持多态,崇尚鸭子模型,由于python函数传参时无法指定类型

        def func (arg):  #arg可以时多种类型,只要其中有send方法即可。

          arg.send()

    3、什么是构造方法?

      __init__

    4、面向对象中为什么要有继承?

      提高代码的复用性,调用原则:先找self所在的函数中,没有的话找父亲要,父亲没有再去找爷爷

    5、python多继承的原则?
      先从左到右

    6、面向对象方式的格式?

    定义:
        class 类名:					- 定义了一个类
            def 函数名(self):	          	- 在类中编写了一个"方法"
                pass 
    调用:
        x1 = 类名()					- 创建了一个对象/实例化一个对象
        x1.函数名()					- 通过对象调用其中一个方法.
    

    7、构造方法

    class Foo:
        def __init__(self,name):     #构造方法,目的进行数据初始化.
            self.name = name 
            self.age = 18 
    obj = Foo('侯明魏')           #通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可.
    应用:1,将数据封装到对象中,以供自己再方法中调用
       2,将数据封装到对象中,以供其它函数调用

    8、面向对象代码如何编写?

      方式一、归类+提取公共值

      方式二、正向编写。在指定类中编写和当前类相关的所有代码 + 提取公共值

    9、self到底是谁?

      self参数时python帮助我们自动传参

      如果执行面向对象中的方法时,前面必须有一个对象:xxx.func()

      1 s15day22 面向对象 
      2 
      3 接下来内容:
      4     第一部分:面向对象
      5     第二部分:网络编程
      6     第三部分:并发编程
      7 
      8 内容回顾:
      9     1. 面向过程
     10     
     11     2. 函数式编程 
     12         
     13         def func(arg):
     14             pass
     15             
     16         func(1)
     17         func(2)
     18         
     19     3. 为什么要将某些函数写在指定文件中?
     20         对函数进行归类
     21     
     22 今日内容:
     23     1. 函数式编程和面向对象的对比
     24 
     25     2. 面向对象代码如何编写
     26     
     27     3. 面向对象三大特性:封装/继承/多态
     28     
     29 内容详细:
     30     1. 函数式编程和面向对象的对比
     31         
     32         a. round 1 请开发一个消息提醒的功能(邮件/短信/微信)   
     33             
     34             函数:
     35                 def email(em,text):
     36                     """
     37                     发送邮件
     38                     :return:
     39                     """
     40                     print(em,text)
     41 
     42                 def msg(tel,text):
     43                     """
     44                     发送短信
     45                     :return:
     46                     """
     47                     print(tel,text)
     48 
     49                 def wechat(num,text):
     50                     """
     51                     发送微信
     52                     :return:
     53                     """
     54                     print(num,text)
     55   
     56 
     57                 # 编写功能:假设用户购买课程,然后给alex发送提醒;
     58                 if 1==1:
     59                     msg('188888888','张进购买了一个学位课')
     60                     email('alex@sb.com','张进购买了一个学位课')
     61                     wechat('xxxx','张进购买了一个学位课')
     62 
     63             面向对象:
     64                 class Message:
     65                     def email(self, em, text):
     66                         """
     67                         发送邮件
     68                         :return:
     69                         """
     70                         print(em,text)
     71 
     72                     def msg(self, tel, text):
     73                         """
     74                         发送短信
     75                         :return:
     76                         """
     77                         print(tel,text)
     78 
     79                     def wechat(self, num, text):
     80                         """
     81                         发送微信
     82                         :return:
     83                         """
     84                         print(num,text)
     85 
     86 
     87                 # 编写功能:假设用户购买课程,然后给alex发送提醒;
     88                 if 1==1:
     89                     obj = Message()
     90                     obj.email('alex@sb.com', '张进购买了一个学位课')
     91                     obj.msg('188888888','张进购买了一个学位课')
     92                     obj.wechat('xxxx','张进购买了一个学位课')
     93 
     94             
     95             对比:
     96                 函数:定义简单/调用简单
     97                 面向对象:定义复杂/调用复杂   好处:归类,将某些类似的函数写在一起
     98                 
     99             总结:
    100                 1. 函数式编程可能会比面向对象好.
    101                 2. Python中支持两种编程方式.
    102                 3. 面向对象方式格式:
    103                     定义:
    104                         class 类名:                    - 定义了一个类
    105                             
    106                             def 函数名(self):        - 在类中编写了一个"方法"
    107                                 pass 
    108                     调用:
    109                         x1 = 类名()                    - 创建了一个对象/实例化一个对象
    110                         x1.函数名()                    - 通过对象调用其中一个方法.
    111                         
    112                 4. 示例:
    113                     class Account:
    114                         def login(self):
    115                             user = input('请输入用户名:')
    116                             pwd = input('请输入密码:')
    117                             if user == 'alex' and pwd == 'sb':
    118                                 print('登录成功')
    119                             else:
    120                                 print('登录失败')
    121 
    122                     obj = Account()
    123                     obj.login()
    124                                     
    125                 
    126         b. round 2 打印 
    127             """
    128             完成以下功能:
    129                 老狗/20岁/男/上山去砍柴
    130                 老狗/20岁/男/开车去东北
    131                 老狗/20岁/男/喜欢大宝剑
    132             """
    133 
    134             # ##################### 函数版本 #########################
    135             """
    136             def kc(name,age,gender):
    137                 data = "%s,性别%s,今年%s岁,喜欢上山砍柴" %(name,gender,age)
    138                 print(data)
    139 
    140             def db(name,age,gender):
    141                 data = "%s,性别%s,今年%s岁,喜欢开车去东北" %(name,gender,age)
    142                 print(data)
    143 
    144             def bj(name,age,gender):
    145                 data = "%s,性别%s,今年%s岁,喜欢大宝剑" %(name,gender,age)
    146                 print(data)
    147 
    148 
    149             kc('老狗',20,'男')
    150             kc('老狗',20,'男')
    151             db('老狗',20,'男')
    152             bj('老狗',20,'男')
    153             """
    154             # ##################### 面向对象 #########################
    155             class LaoGou:
    156 
    157                 def __init__(self,name,age,gender): # 特殊的方法,如果 类名() ,则该方法会被自动执行 (构造方法)
    158                     self.n1 = name
    159                     self.n2 = age
    160                     self.n3 = gender
    161 
    162                 def kc(self):
    163                     data = "%s,性别%s,今年%s岁,喜欢上山砍柴" %(self.n1,self.n3,self.n2)
    164                     print(data)
    165 
    166                 def db(self):
    167                     data = "%s,性别%s,今年%s岁,喜欢开车去东北" %(self.n1,self.n3,self.n2)
    168                     print(data)
    169 
    170                 def bj(self):
    171                     data = "%s,性别%s,今年%s岁,喜欢大宝剑" %(self.n1,self.n3,self.n2)
    172                     print(data)
    173 
    174             obj = LaoGou('老狗',20,'')
    175             obj.kc()
    176             obj.db()
    177             obj.bj()
    178     
    179             
    180             总结:
    181                 1. 构造方法
    182                     示例一:
    183                         class Foo:
    184                             
    185                             def __init__(self,name):     构造方法,目的进行数据初始化.
    186                                 self.name = name 
    187                                 self.age = 18 
    188                         
    189                         obj = Foo('侯明魏')
    190                         
    191                         通过构造方法,可以将数据进行打包,以后使用时,去其中获取即可.
    192                     
    193                     示例二:    
    194                         class Bar:
    195                             pass 
    196                         obj = Bar()
    197                     
    198                 2. 应用
    199                     a. 将数据封装到对象中,以供自己在方法中调用
    200                         class FileHandler:
    201                             def __init__(self,file_path):
    202                                 self.file_path = file_path
    203                                 self.f = open(self.file_path, 'rb')
    204 
    205                             def read_first(self):
    206                                 # self.f.read()
    207                                 # ...
    208                                 pass
    209 
    210                             def read_last(self):
    211                                 # self.f.read()
    212                                 # ...
    213                                 pass
    214 
    215                             def read_second(self):
    216                                 # self.f...
    217                                 # ...
    218                                 pass
    219                             
    220                         obj = FileHandler('C:/xx/xx.log')
    221                         obj.read_first()
    222                         obj.read_last()
    223                         obj.read_second()
    224                         obj.f.close()
    225                     
    226                     b. 将数据封装到对象中,以供其他函数调用 
    227                         def new_func(arg):
    228                             arg.k1
    229                             arg.k2
    230                             arg.k6
    231 
    232                         class Foo:
    233                             def __init__(self,k1,k2,k6):
    234                                 self.k1 = k1
    235                                 self.k2 = k2
    236                                 self.k6 = k6
    237 
    238                         obj = Foo(111,22,333)
    239                         new_func(obj)
    240 
    241                     
    242         练习: 信息管理系统
    243             1. 用户登录
    244             2. 显示当前用户信息
    245             3. 查看当前用户所有的账单
    246             4. 购买姑娘形状的抱枕 
    247             
    248             示例:
    249                 class UserInfo:
    250 
    251                     def __init__(self):
    252                         self.name = None
    253 
    254                     def info(self):
    255                         print('当前用户名称:%s' %(self.name,))
    256 
    257                     def account(self):
    258                         print('当前用户%s的账单是:....' %(self.name,))
    259 
    260                     def shopping(self):
    261                         print('%s购买了一个人形抱枕' %(self.name,))
    262 
    263                     def login(self):
    264                         user = input('请输入用户名:')
    265                         pwd = input('请输入密码:')
    266                         if pwd == 'sb':
    267                             self.name = user
    268                             while True:
    269                                 print("""
    270                                     1. 查看用户信息
    271                                     2. 查看用户账单
    272                                     3. 购买抱枕
    273                                 """)
    274                                 num = int(input('请输入选择的序号:'))
    275                                 if num == 1:
    276                                     self.info()
    277                                 elif num ==2:
    278                                     self.account()
    279                                 elif num == 3:
    280                                     self.shopping()
    281                                 else:
    282                                     print('序号不存在,请重新输入')
    283                         else:
    284                             print('登录失败')
    285 
    286                 obj = UserInfo()
    287                 obj.login()
    288             
    289             总结:
    290                 class Foo:
    291                     def func2(self):
    292                         print('func2')
    293                     
    294                     def func1(self):
    295                         self.fun2()
    296                         print('func1')
    297                         
    298                         
    299                 obj = Foo()
    300                 obj.func1()
    301     
    302         
    303     2. 面向对象代码如何编写
    304         a. 规则 
    305             
    306             class Foo:
    307                 
    308                 def __init__(self,name):
    309                     self.name = name 
    310                     
    311                     
    312                 def detail(self,msg):
    313                     print(self.name,msg)
    314                     
    315             obj = Foo()
    316             obj.detail()
    317             
    318             
    319         b. 什么时候写?如何写?
    320             
    321             方式一:归类+提取公共值
    322                 归类:
    323                     class File:
    324                         def file_read(self,file_path):
    325                             pass
    326 
    327                         def file_update(self,file_path):
    328                             pass
    329 
    330                         def file_delete(self,file_path):
    331                             pass
    332 
    333                         def file_add(self,file_path):
    334                             pass
    335 
    336                     class Excel:
    337                         def excel_read(self,file_path):
    338                             pass
    339 
    340                         def excel_update(self,file_path):
    341                             pass
    342 
    343                         def excel_delete(self,file_path):
    344                             pass
    345 
    346                         def excel_add(self,file_path):
    347                             pass
    348             
    349                 提取公共值:
    350                     class File:
    351                         def __init__(self,file_path):
    352                             self.file_path = file_path
    353                             
    354                         def file_read(self):
    355                             pass
    356 
    357                         def file_update(self):
    358                             pass
    359 
    360                         def file_delete(self):
    361                             pass
    362 
    363                         def file_add(self):
    364                             pass
    365 
    366                     class Excel:
    367                         def __init__(self,file_path):
    368                             self.file_path = file_path
    369                             
    370                         def excel_read(self):
    371                             pass
    372 
    373                         def excel_update(self):
    374                             pass
    375 
    376                         def excel_delete(self):
    377                             pass
    378 
    379                         def excel_add(self):
    380                             pass
    381             
    382             方式二:在指定类中编写和当前类相关的所有代码 + 提取公共值
    383                 
    384                 class Message:
    385                     def email(self):    
    386                         pass 
    387                 
    388                 class Person:
    389                     def __init__(self,na, gen, age, fig)
    390                         self.name = na
    391                         self.gender = gen
    392                         self.age = age
    393                         self.fight =fig
    394                         
    395                     def grassland(self):    
    396                         self.fight = self.fight - 10  
    397                         
    398                     def practice(self):
    399                         self.fight = self.fight + 90   
    400                         
    401                     def incest(self):
    402                         self.fight = self.fight - 666
    403                         
    404                 
    405                 cang = Person('苍井井', '', 18, 1000)    # 创建苍井井角色
    406                 dong = Person('东尼木木', '', 20, 1800)  # 创建东尼木木角色
    407                 bo = Person('波多多', '', 19, 2500)      # 创建波多多角色
    408             
    409                 dong.grassland()
    410             
    411             
    412     3. 面向对象的三大特性:封装/继承/多态 
    413         
    414         封装:
    415             将相关功能封装到一个类中:
    416                 class Message:
    417                     def email(self):pass
    418                     def msg(self):pass
    419                     def wechat(self):pass
    420             将数据封装到一个对象中:
    421                 
    422                 class Person:
    423                     def __init__(self,name,age,gender):
    424                         self.name = name
    425                         self.age = age
    426                         self.gender = gender
    427                         
    428                 obj = Person('孙福来',18,'')
    429         继承:
    430             class SuperBase:
    431                     def f3(self):
    432                         print('f3')
    433 
    434                 class Base(SuperBase):  # 父类,基类
    435                     def f2(self):
    436                         print('f2')
    437 
    438                 class Foo(Base):        # 子类,派生类
    439                     
    440                     def f1(self):
    441                         print('f1')
    442                         
    443                 obj = Foo()
    444                 obj.f1()
    445                 obj.f2()
    446                 obj.f3()
    447                 # 原则:现在自己类中找,么有就去父类
    448                             
    449             总结:
    450                 1. 继承编写 
    451                     
    452                     class Foo(父类):
    453                         pass 
    454                         
    455                 2. 支持多继承(先找左/再找右)
    456                 
    457                 
    458                 3. 为什么要有多继承? 提供代码重用性
    459                 
    460                 
    461                 练习: 找self到底是谁的对象?从谁开始找.
    462                 
    463         多态: 
    464             多种形态或多种状态
    465             鸭子模型,只要可以嘎嘎叫就是鸭子.
    466             
    467             Python
    468                 #  由于python原生支持多态,所以没有特殊性.
    469                 """
    470                 class Foo1:
    471                     def f1(self):
    472                         pass 
    473                 
    474                 class Foo2:
    475                     def f1(self):
    476                         pass 
    477                 
    478                 class Foo3:
    479                     def f1(self):
    480                         pass 
    481                         
    482                         
    483                 def func(arg):
    484                     arg.f1()
    485                     
    486                 obj = Foo1() # obj= Foo2()   obj = Foo3()
    487                 func(obj)
    488                 """
    489             
    490             java
    491                 class Son(list):
    492                     pass 
    493                 
    494                 class Son1(list):
    495                     pass 
    496                 
    497                 # 以后传参时,arg可以是:list类的对象/list任何子类的对象
    498                 public void func(list arg){
    499                     print(arg)
    500                 }
    501                 
    502                 # obj = list()
    503                 # obj = Son()
    504                 obj = Son1()
    505                 func(obj)
    506             
    507 重点:
    508     1. 编写方式执行流程
    509     
    510     2. 如何归类?
    511         反向:归类+提取公共值
    512         正向:类相关的功能+提取公共值
    513         
    514     3. 三大特性
    515         
    516 作业:练习题 
    517         
    518             
    519             
    520             
    521             
    522             
    523             
    524             
    525             
    526             
    527     
    528     
    529     
    530     
    531     
    532     
    533     
    534     
    535     
    536     
    537     
    538     
    539     
    540     
    541     
    542     
    543     
    544     
    545     
    View Code
  • 相关阅读:
    css3学习 理论之渐变
    css3学习 理论之弹性盒模型
    backbone 初识
    css3学习 理论之动画
    backbone 学习之小例子一枚
    Moving property files outside jar in spring standalone application
    mysql 命令
    Broken pipe
    Gerrit
    maven eclipse 工程缺少build path怎么办?
  • 原文地址:https://www.cnblogs.com/xiaobai686/p/11741015.html
Copyright © 2011-2022 走看看