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

作者: ggirls (哥)   2021-12-26 00:59:57
class ClassName:
DEFAULT_SIZE = 10
def __init__(self):
self.size = ClassName.DEFAULT_SIZE
因為有時ClassName會改,
引用時如何不寫死呢(self.size=...)
作者: lycantrope (阿寬)   2021-12-27 13:31:00
可能不想__init__內args有size吧w
作者: OnoderaHaru (小野寺春)   2021-12-26 01:03:00
self.__class__
作者: panex0845 (胖克思)   2021-12-26 03:37:00
size = self.DEFAULT_SIZE 就我的認知 這行是多餘的因為初始化self後 DEFAULT_SIZE本來就會從屬於物件沒有必要在初始化建立一個size 只會浪費記憶體空間
作者: s0914714 (YA)   2021-12-26 08:34:00
樓上是說class attribute 賦值給instance有點多餘self.DEFAULT_SIZE 就是10
作者: lycantrope (阿寬)   2021-12-26 09:15:00
真要複製也可以直接寫self.DEFAULT_SIZE... init內寫成 self.size = self.DEFAULT_SIZE就好staticmethod就不該從class內取值啊你還有classmethod可以用吧
作者: poototo (poototo)   2021-12-26 10:14:00
self可以直接get類別變數
作者: OnoderaHaru (小野寺春)   2021-12-26 13:15:00
稍微查了一些資料, 有錯還請幫忙更正, 個人理解如下https://i.imgur.com/tM4sFFY.png查到結果很多都建議使用 type(self) 避免以下副作用https://i.imgur.com/8htBSwZ.png
作者: s0914714 (YA)   2021-12-26 17:38:00
__class__和self.__class__ 沒有對它們賦值時兩者相等如果你只是取值那就放心用吧
作者: stucode   2021-12-26 19:58:00
__class__ 和 self.__class__ 是不一樣的。__class__ 參考的是定義方法的類別。self.__class__ 則是物件實際的類別。如果你的方法(包含 __init__)是在基礎類別兩者就有差。
作者: poototo (poototo)   2021-12-26 23:47:00
def __init__(self, size=DEFAULT_SIZE):init的參數可以把類別變數設為預設值

Links booklink

Contact Us: admin [ a t ] ucptt.com