[問題] 參考類別變數,但不寫死類別名稱

看板Python作者 (哥)時間3年前 (2021/12/26 00:59), 3年前編輯推噓12(12012)
留言24則, 6人參與, 3年前最新討論串1/1
class ClassName: DEFAULT_SIZE = 10 def __init__(self): self.size = ClassName.DEFAULT_SIZE 因為有時ClassName會改, 引用時如何不寫死呢(self.size=...) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.28.30.42 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1640451599.A.EED.html

12/26 01:03, 3年前 , 1F
self.__class__
12/26 01:03, 1F
直接= __class__和self.__class__會有什麼時候不同嗎? ※ 編輯: ggirls (110.28.30.42 臺灣), 12/26/2021 02:34:26

12/26 03:37, 3年前 , 2F
size = self.DEFAULT_SIZE 就我的認知 這行是多餘的
12/26 03:37, 2F

12/26 03:41, 3年前 , 3F
因為初始化self後 DEFAULT_SIZE本來就會從屬於物件
12/26 03:41, 3F

12/26 03:42, 3年前 , 4F
沒有必要在初始化建立一個size 只會浪費記憶體空間
12/26 03:42, 4F
我題目修改成self.size ※ 編輯: ggirls (110.28.30.42 臺灣), 12/26/2021 07:53:41

12/26 08:34, 3年前 , 5F
樓上是說class attribute 賦值給instance有點多餘
12/26 08:34, 5F

12/26 08:36, 3年前 , 6F
self.DEFAULT_SIZE 就是10
12/26 08:36, 6F

12/26 09:15, 3年前 , 7F
真要複製也可以直接寫self.DEFAULT_SIZE
12/26 09:15, 7F
self.size未來會被改動,所以還是有意義。 現在比較想了解 self.size = __class__.DEFAULT_SIZE 未來會不會有料想不到的負作用? 而且在 staticmethod 中,似乎也只能用 __class__? ※ 編輯: ggirls (110.28.30.42 臺灣), 12/26/2021 09:32:19

12/26 09:32, 3年前 , 8F
... init內寫成 self.size = self.DEFAULT_SIZE就好
12/26 09:32, 8F

12/26 09:34, 3年前 , 9F
staticmethod就不該從class內取值啊
12/26 09:34, 9F

12/26 09:36, 3年前 , 10F
你還有classmethod可以用吧
12/26 09:36, 10F

12/26 10:14, 3年前 , 11F
self可以直接get類別變數
12/26 10:14, 11F
※ 編輯: ggirls (110.28.30.42 臺灣), 12/26/2021 11:11:44

12/26 13:15, 3年前 , 12F
稍微查了一些資料, 有錯還請幫忙更正, 個人理解如下
12/26 13:15, 12F

12/26 13:15, 3年前 , 13F

12/26 13:33, 3年前 , 14F
查到結果很多都建議使用 type(self) 避免以下副作用
12/26 13:33, 14F

12/26 13:34, 3年前 , 15F

12/26 17:38, 3年前 , 16F
__class__和self.__class__ 沒有對它們賦值時兩者相等
12/26 17:38, 16F

12/26 17:39, 3年前 , 17F
如果你只是取值那就放心用吧
12/26 17:39, 17F

12/26 19:58, 3年前 , 18F
__class__ 和 self.__class__ 是不一樣的。
12/26 19:58, 18F

12/26 19:58, 3年前 , 19F
__class__ 參考的是定義方法的類別。
12/26 19:58, 19F

12/26 19:58, 3年前 , 20F
self.__class__ 則是物件實際的類別。
12/26 19:58, 20F

12/26 19:59, 3年前 , 21F
如果你的方法(包含 __init__)是在基礎類別兩者就有差。
12/26 19:59, 21F

12/26 23:47, 3年前 , 22F
def __init__(self, size=DEFAULT_SIZE):
12/26 23:47, 22F

12/26 23:48, 3年前 , 23F
init的參數可以把類別變數設為預設值
12/26 23:48, 23F

12/27 13:31, 3年前 , 24F
可能不想__init__內args有size吧w
12/27 13:31, 24F
文章代碼(AID): #1XnquFxj (Python)
文章代碼(AID): #1XnquFxj (Python)