Python基础—11-面向对象(01)

前端之家收集整理的这篇文章主要介绍了Python基础—11-面向对象(01)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<h1 id="面向对象" data-source-line="1">面向对象
<h3 id="面向对象-2" data-source-line="3">面向对象
<ul data-source-line="5">

  • 与面向过程对比:
    • 面向过程:数学逻辑的映射,学会做个好员工
    • 面向对象:生活逻辑的映射,学会做个好领导
  • 生活实例:
    • 类: 人 手机 电脑
      • 对象: 我的手机、女朋友的手机 你的那部T400、老板桌上的电脑
  • 官方定义:
    • 类:具有相同特征(属性和行为)的事物的抽象
    • 对象:某个类的具象
  • 编程语言:
    • 类:是一种自定义的数据类型
    • 对象:某个类类型的变量
    • 类的定义:

      内容
    • 语法说明:

      • 定义类需要使用关键字class
      • 类名:原则上只要符合标识符命名规范即可,但是通过我们都使用大驼峰(每个单词首字母大写)风格命名
        • 如:UserName
      • 类名后面的':'不要忘记
      • 类的内容要进行整体缩进
      • 行为:通过方法体现,在类中定义相关的函数即可(第一个参数通常是self)
      • 属性:通过变量体现,在需要时动态添加,很多时候定义类时没有体现
      • 成员访问:
    • 示例:

      方法体现
      <span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 吃饭</span>
      <span style="color: #0000ff"&gt;def</span><span style="color: #000000"&gt; eat(self):
          </span><span style="color: #0000ff"&gt;print</span>(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;红烧排骨我喜欢吃</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;)
      
      </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 睡觉</span>
      <span style="color: #0000ff"&gt;def</span><span style="color: #000000"&gt; sleep(self):
          </span><span style="color: #0000ff"&gt;print</span>(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;睡觉也是一种生活态度</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;)

      <span style="color: #008000">#<span style="color: #008000"> 定义对象
      liang =<span style="color: #000000"> Person()
      <span style="color: #008000">#<span style="color: #008000"> 调用方法
      <span style="color: #000000">liang.eat()
      liang.sleep()
      <span style="color: #008000">#<span style="color: #008000"> 属性时动态添加
      liang.name = <span style="color: #800000">'<span style="color: #800000">上官<span style="color: #800000">'
      <span style="color: #008000">#<span style="color: #008000"> 获取属性
      <span style="color: #0000ff">print(liang.name)

      self使用

      调用该方法就表示谁 (</span><span style="color: #0000ff"&gt;def</span><span style="color: #000000"&gt; introduce(self): </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 不但可以访问成员<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a></span> <span style="color: #0000ff"&gt;print</span>(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;我叫{}</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;.format(self.name)) </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 还可以<a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>成员<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>

      <span style="color: #000000"> self.run()

      fei =<span style="color: #000000"> Person()
      fei.name = <span style="color: #800000">'<span style="color: #800000">欧阳<span style="color: #800000">'<span style="color: #000000">
      fei.run()
      fei.introduce()

      long =<span style="color: #000000"> Person()
      long.name = <span style="color: #800000">'<span style="color: #800000">诸葛<span style="color: #800000">'<span style="color: #000000">
      long.introduce()

      • 说明:
      1方法都有一个self参数,调用的时候不需要传递该参数 23调用该方法self就代表谁,哪个对象调用就表示哪个对象 4.通过self可以访问成员属性,也可以调用成员方法

      __str__方法

      方法打印对象,默认打印 类名 + 地址 内容,重写该方法即可,要求返回一个字符串 james =<span style="color: #000000"> Person()
      james.name
      = <span style="color: #800000">'
      <span style="color: #800000">勒布朗.詹姆斯
      <span style="color: #800000">'
      <span style="color: #000000">
      james.age
      = 33
      <span style="color: #0000ff">print
      (james)

      构造方法:创建对象后,初始化属性时,系统会自动调用方法

      </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 构造<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>:创建对象后,初始化系统就会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a><a href="/tag/diaoyong/" target="_blank" class="keywords">调用</a>该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span> <span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__init__</span><span style="color: #000000"&gt;(self,name,age,color): </span><span style="color: #0000ff"&gt;print</span>(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;__init__</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;) self.name </span>=<span style="color: #000000"&gt; name self.age </span>=<span style="color: #000000"&gt; age self.color </span>=<span style="color: #000000"&gt; color

      <span style="color: #008000">#<span style="color: #008000"> 这种形式比较繁琐<span style="color: #008000">

      <span style="color: #008000"> tom = Cat()<span style="color: #008000">

      <span style="color: #008000"> tom.name = 'Tom'<span style="color: #008000">

      <span style="color: #008000"> tom.age = 3<span style="color: #008000">

      <span style="color: #008000"> tom.color = '蓝色'

      <span style="color: #008000">#<span style="color: #008000"> 这种比较简洁
      tom = Cat(<span style="color: #800000">'<span style="color: #800000">Tom<span style="color: #800000">',3,<span style="color: #800000">'<span style="color: #800000">蓝色<span style="color: #800000">'<span style="color: #000000">)
      <span style="color: #0000ff">print(tom)

      析构方法:当对象释放时系统会自动调用,通常用于释放资源

      方法:当对象释放时,系统会自动调用 删除,则会立即调用方法 方法一般做资源释放处理:数据库连接断开,文件关闭 (bajie =<span style="color: #000000"> Pig()
      <span style="color: #0000ff">del
      <span style="color: #000000"> bajie
      <span style="color: #0000ff">print
      (<span style="color: #800000">'
      <span style="color: #800000">八戒,一路走好!
      <span style="color: #800000">'
      )

    • 经典示例:小明手里有两张牌,左手♥K,右手♠A,小明交换两手的牌后,手里分别是什么?

      • 思路:
        • 先找到对象:左手、右手、♥K、♠A、小明
        • 根据对象抽象出对应的类:人、手、牌
        • 根据需要写出相应的逻辑,很可能反过来完善类的设计
        • 按照题目要求创建相关对象,调用相关方法,实现相关功能
      • 代码

      <span style="color: #008000">#<span style="color: #008000"> 扑克牌
      <span style="color: #0000ff">class<span style="color: #000000"> Poker:
      <span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,color,number):
      self.color =<span style="color: #000000"> color
      self.number =<span style="color: #000000"> number

      </span><span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__str__</span><span style="color: #000000"&gt;(self):
          </span><span style="color: #0000ff"&gt;return</span> <span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;{}{}</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;.format(self.color,self.number) 

      <span style="color: #008000">#<span style="color: #008000"> 创建两张牌
      p1 = Poker(<span style="color: #800000">'<span style="color: #800000">♥<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">K<span style="color: #800000">'<span style="color: #000000">)
      p2 = Poker(<span style="color: #800000">'<span style="color: #800000">♠<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">A<span style="color: #800000">'<span style="color: #000000">)

      <span style="color: #008000">#<span style="color: #008000"> 手的类
      <span style="color: #0000ff">class<span style="color: #000000"> Hand:
      <span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,poker):
      self.poker =<span style="color: #000000"> poker

      </span><span style="color: #0000ff"&gt;def</span><span style="color: #000000"&gt; hold_poker(self,poker):
          self.poker </span>=<span style="color: #000000"&gt; poker

      <span style="color: #008000">#<span style="color: #008000"> 创建左右两只手
      left_hand =<span style="color: #000000"> Hand(p1)
      right_hand =<span style="color: #000000"> Hand(p2)

      <span style="color: #008000">#<span style="color: #008000"> 人的类
      <span style="color: #0000ff">class<span style="color: #000000"> Person:
      <span style="color: #0000ff">def <span style="color: #800080">init<span style="color: #000000">(self,left_hand,right_hand):
      self.name =<span style="color: #000000"> name
      self.left_hand =<span style="color: #000000"> left_hand
      self.right_hand =<span style="color: #000000"> right_hand

      </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 展示手里的牌</span>
      <span style="color: #0000ff"&gt;def</span><span style="color: #000000"&gt; show(self):
          </span><span style="color: #0000ff"&gt;print</span>(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;{}张开手</span><span style="color: #800000"&gt;'</span>.format(self.name),end=<span style="color: #800000"&gt;'</span> <span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;)
          </span><span style="color: #0000ff"&gt;print</span>(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;左手:{}</span><span style="color: #800000"&gt;'</span>.format(self.left_hand.poker),end=<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;,</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;)
          </span><span style="color: #0000ff"&gt;print</span>(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;右手:{}</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;.format(self.right_hand.poker))
      
      </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 交换两手的牌</span>
      <span style="color: #0000ff"&gt;def</span><span style="color: #000000"&gt; swap(self):
          self.left_hand.poker,self.right_hand.poker </span>=<span style="color: #000000"&gt; self.right_hand.poker,self.left_hand.poker
          </span><span style="color: #0000ff"&gt;print</span>(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;{}交换两手的牌</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;.format(self.name))   

      <span style="color: #008000">#<span style="color: #008000"> 创建小明对象
      xiaoming = Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">,right_hand)

      <span style="color: #008000">#<span style="color: #008000"> 展示手里的牌
      <span style="color: #000000">xiaoming.show()

      <span style="color: #008000">#<span style="color: #008000"> 交换两手的牌
      <span style="color: #000000">xiaoming.swap()

      <span style="color: #008000">#<span style="color: #008000">再次展示
      xiaoming.show()

    • 练习:设计一个数学类,有两个成员属性,成员方法有加、减、乘、除,展示成员。

    函数" data-source-line="238">常用内置函数

      内置函数:在类的内部,特定时机自动触发的函数

    • 示例:setattr、getattr、delattr

      = </span><span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__str__</span><span style="color: #000000"&gt;(self): </span><span style="color: #0000ff"&gt;return</span> <span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;姓名:{}</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;.format(self.name) </span><span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__del__</span><span style="color: #000000"&gt;(self): </span><span style="color: #0000ff"&gt;print</span>(<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;对象即将销毁</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;) </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 当<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>不存在的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span> <span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__getattr__</span><span style="color: #000000"&gt;(self,item): </span><span style="color: #0000ff"&gt;if</span> item == <span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;age</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;: </span><span style="color: #0000ff"&gt;return</span> 18 <span style="color: #0000ff"&gt;else</span><span style="color: #000000"&gt;: </span><span style="color: #0000ff"&gt;return</span> <span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;你猜</span><span style="color: #800000"&gt;'</span> <span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 当设置不存在的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span> <span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__setattr__</span><span style="color: #000000"&gt;(self,key,value): </span><span style="color: #0000ff"&gt;print</span><span style="color: #000000"&gt;(key,value) self.</span><span style="color: #800080"&gt;__dict__</span>[key] =<span style="color: #000000"&gt; value </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 销毁对象成员<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>时,会<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span> <span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__delattr__</span><span style="color: #000000"&gt;(self,item): </span><span style="color: #0000ff"&gt;print</span>(item,<span style="color: #800000"&gt;'</span><span style="color: #800000"&gt;即将销毁</span><span style="color: #800000"&gt;'</span><span style="color: #000000"&gt;)

      xiaoming = Person(<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)
      xiaoming.age = 20
      <span style="color: #0000ff">print<span style="color: #000000">(xiaoming.age)
      <span style="color: #008000">#<span style="color: #008000"> 存放对象的所有属性<span style="color: #008000">

      <span style="color: #008000"> print(xiaoming.dict)<span style="color: #008000">

      <span style="color: #008000"> print(xiaoming)

      <span style="color: #0000ff">del xiaoming.age

      将对象当做字典操作,特定时机会自动触发的方法

      方法 self.[key] =</span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 将对象当做字典操作,根据键<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>值时会触发该<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span> <span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__getitem__</span><span style="color: #000000"&gt;(self,item): </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; print(item)</span> <span style="color: #0000ff"&gt;return</span> self.<span style="color: #800080"&gt;__dict__</span><span style="color: #000000"&gt;.get(item) </span><span style="color: #008000"&gt;#</span><span style="color: #008000"&gt; 将对象当做字典操作,<a href="/tag/shanchu/" target="_blank" class="keywords">删除</a>指定的键值对时<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>触发</span> <span style="color: #0000ff"&gt;def</span> <span style="color: #800080"&gt;__delitem__</span><span style="color: #000000"&gt;(self,key): </span><span style="color: #0000ff"&gt;del</span> self.<span style="color: #800080"&gt;__dict__</span><span style="color: #000000"&gt;[key]

      xiaoming =<span style="color: #000000"> Person()

      xiaoming[<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">'] = <span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'
      <span style="color: #0000ff">print(xiaoming.<span style="color: #800080">dict<span style="color: #000000">)

      <span style="color: #0000ff">print(xiaoming[<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">'<span style="color: #000000">])

      <span style="color: #0000ff">del xiaoming[<span style="color: #800000">'<span style="color: #800000">name<span style="color: #800000">']

      将对象当做函数调用时,会自动触发下面方法

      函数调用时,会自动触发该方法 (self,*args,** xiaoming =<span style="color: #000000"> Person()

      <span style="color: #008000">#<span style="color: #008000"> 这样操作,需要提供call方法
      ret = xiaoming(1,2,name=<span style="color: #800000">'<span style="color: #800000">小明<span style="color: #800000">'<span style="color: #000000">)
      <span style="color: #0000ff">print(ret)

      函数判断

      (self,**

      <span style="color: #0000ff">def<span style="color: #000000"> test():
      <span style="color: #0000ff">pass<span style="color: #000000">

      a =<span style="color: #000000"> A()

      <span style="color: #008000">#<span style="color: #008000"> 判断是否可调用
      <span style="color: #0000ff">print<span style="color: #000000">(callable(test))
      <span style="color: #0000ff">print<span style="color: #000000">(callable(a))

      <span style="color: #008000">#<span style="color: #008000"> 判断是否拥有'call'属性
      <span style="color: #0000ff">print(hasattr(test,<span style="color: #800000">'<span style="color: #800000">call<span style="color: #800000">'<span style="color: #000000">))
      <span style="color: #0000ff">print(hasattr(a,<span style="color: #800000">'<span style="color: #800000">call<span style="color: #800000">'<span style="color: #000000">))

      <span style="color: #008000">#<span style="color: #008000"> 判断是否是函数
      <span style="color: #0000ff">from inspect <span style="color: #0000ff">import<span style="color: #000000"> isfunction
      <span style="color: #0000ff">print<span style="color: #000000">(isfunction(test))
      <span style="color: #0000ff">print(isfunction(a))

    猜你在找的Python相关文章