[问题] 参考类别变量,但不写死类别名称

楼主: 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