亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類和實例屬性有什么區別?

類和實例屬性有什么區別?

慕少森 2019-06-01 14:35:21
類和實例屬性有什么區別?在以下方面是否有任何有意義的區別:class A(object):     foo = 5   # some default valuev.V.class B(object):     def __init__(self, foo=5):         self.foo = foo如果您正在創建許多實例,那么這兩種樣式在性能或空間要求上有什么不同嗎?當您閱讀代碼時,您是否認為這兩種樣式的含義有很大的不同?
查看完整描述

4 回答

?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

區別在于類上的屬性由所有實例共享。實例上的屬性是該實例的唯一屬性。

如果來自C+,類上的屬性更像是靜態成員變量。


查看完整回答
反對 回復 2019-06-01
?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

這里有一個很好的,并將其摘要如下。

class Bar(object):
    ## No need for dot syntax
    class_var = 1

    def __init__(self, i_var):
        self.i_var = i_var## Need dot syntax as we've left scope of class namespaceBar.class_var## 1foo = MyClass(2)## Finds i_var in
         foo's instance namespacefoo.i_var## 2## Doesn't find class_var in instance namespace…## So look's in
          class namespace (Bar.__dict__)foo.class_var## 1


類屬性分配

  • 如果通過訪問類設置了類屬性,則它將覆蓋所有實例

    foo = Bar(2)foo.class_var## 1Bar.class_var = 2foo.class_var## 2
  • 如果通過訪問實例來設置類變量,它將覆蓋該值。只有在這種情況下..這實際上覆蓋了類變量,并直觀地將其轉換為一個可用的實例變量,只有在這種情況下.

    foo = Bar(2)foo.class_var## 1foo.class_var = 2foo.class_var## 2Bar.class_var## 1

什么時候使用class屬性?

  • 存儲常數..由于類屬性可以作為類本身的屬性訪問,所以使用它們來存儲類范圍的、特定于類的常量通常是很好的。

    class Circle(object):
         pi = 3.14159
    
         def __init__(self, radius):
              self.radius = radius   
        def area(self):
             return Circle.pi * self.radius * self.radiusCircle.pi## 3.14159c = Circle(10)c.pi## 3.14159c.area()## 314.159
  • 定義默認值..作為一個簡單的例子,我們可以創建一個有界列表(即只能容納一定數量或更少元素的列表),并選擇默認上限為10項。

    class MyClass(object):
        limit = 10
    
        def __init__(self):
            self.data = []
        def item(self, i):
            return self.data[i]
    
        def add(self, e):
            if len(self.data) >= self.limit:
                raise Exception("Too many elements")
            self.data.append(e)
    
     MyClass.limit ## 10


查看完整回答
反對 回復 2019-06-01
  • 4 回答
  • 0 關注
  • 1195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號