91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中利用class()實現面向對象

發布時間:2021-04-16 16:31:35 來源:億速云 閱讀:128 作者:Leah 欄目:開發技術

怎么在Python中利用class()實現面向對象?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

首先,類是一個集合,包含了數據,操作描述的一個抽象集合

你可以首先只把類當做一個容器來使用

class Cycle:
  def __init__(self,r):
    self.pi=3.14
    self.r=r
a=Cycle(4)
b=Cycle(7)
def square(r,pi):
  return pi * (r**2)
PI=3.14
a_r=4
a_square=square(a_r,PI)
b_r=7
b_square=square(b_r,PI)

看起來沒有問題,好了,現在問題來了,假如,你現在要計算很多圓的面積,那么你是不是發現,不斷的用變量命來隔離數據方式變得越來越臟了。而且你發現是不是有很多冗余的代碼

好了我們這么改一改

class Cycle:
  def __init__(self,r):
    self.pi=3.14
    self.r=r

def square(value):
  if not isinstance(value,Cycle):
    raise ValueError("value muse be Cycle instace")
  value.square=value.pi * (value.r**2)

a=Cycle(4)
b=Cycle(7)

square(a)
square(b)

好了,你有沒有覺得現在清晰了一點。

好了,現在我們現在還可以改一下

class Cycle:
  def __init__(self,r):
    self.pi=3.14
    self.r=r
  def square(self,value):
    return self.pi * (self.r**2)

好了,現在你可能迷惑了,我們為啥要把 square 函數放在類中?

好了,我現在要計算長方形,原型,梯形各種各樣二維幾何圖形的面積,這樣該怎么寫???

你想了想我們之前說的將類作為數據容器,你想了想寫了如下的代碼

class Rectangle:
  def __init__(self,length,height):
    self.length=length
    self.height=height
class Cycle:
  def __init__(self,r):
    self.pi=3.14
    self.r=r
def rec_square(value):
  if not isinstance(value,Rectangle):
    raise ValueError("value muse be Rectangle instace")
  value.square=value.length * value.height
def cycle_square(value):
  if not isinstance(value,Cycle):
    raise ValueError("value muse be Cycle instace")
  value.square=value.pi * (value.r**2)

你想一想,這樣是不是感覺如果計算需求越來越多,代碼是不是還是會越來越臟?

如果我們將函數放在類里,并且用繼承的特性,我們可以寫出這樣的代碼

class Geometry:
  def get_square(self):
    raise NotImplementedError

class Rectangle(Geometry):
  def __init__(self,length,height):
    self.length=length
    self.height=height
  def get_square(self):
    return self.length*self.height

class Cycle(Geometry):
  def __init__(self,r):
    self.pi=3.14
    self.r=r
  def get_square(self):
    return self.pi * (self.r**2)

def square(value):
  if not isinstance(value,Geometry):
    raise ValueError("value muse be Geometry instace")
  value.square=value.get_square()

你看,我們現在只需要給用戶暴露一個統一的接口,用戶(用戶也以是我們自己)不需要關心怎么樣選擇正確的函數,他只需要調用統一的 square 函數,就可以獲取到具體的面積,是不是輕松很多了??

所以,類,它是對數據,操作的一種封裝,這個封裝的意義在于我們可以去更好的優化代碼結構。

好了再舉一個例子,我們可以用類來控制訪問權限

class People:
  def __init__(self,website):
    self.__favorite_website="1024.com"
  def bad_or_not(self):
    return self.__favorite_website=="1024.com"

你看,我們用 private 變量,來確保外部沒法直接訪問一些敏感數據(實際上 Python 里 private 并不嚴格,hook 一下還是可以訪問的)

好,在舉一個例子

class People:
  def __init__(self,website):
    self.__favorite_website="1024.com"
  def bad_or_not(self):
    return self.__favorite_website=="1024.com"
  @property
  def favorite_website(self):
    return self.__favorite_website
  @favorite_website.setter
  def favorite_website(self,value):
    if value=="1024.com":
      raise ValueError("你不能去草榴,兄弟,你營養不足")
    self.__favorite_website=value

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临江市| 永州市| 阜新| 金昌市| 郴州市| 沙河市| 台中县| 长治市| 西充县| 镇巴县| 榆社县| 宣城市| 台山市| 临邑县| 桓台县| 六安市| 元谋县| 淳安县| 博罗县| 尖扎县| 广平县| 闽侯县| 钦州市| 隆尧县| 乌拉特前旗| 景德镇市| 芦山县| 阿巴嘎旗| 广丰县| 上饶市| 定襄县| 西乌| 南木林县| 五家渠市| 石泉县| 普安县| 遂溪县| 大田县| 鲁甸县| 锦屏县| 通州市|