白白白白丶白 发表于 2020-7-13 13:36:52

小问题。类方法

本帖最后由 白白白白丶白 于 2020-7-13 13:44 编辑

类方法用在与单个实例无关但与类或类的所有实例相关的所有场景

请问这个比较再通俗点解释怎么说,类似什么情况下需要定义类方法而不是实例方法。

heidern0612 发表于 2020-7-13 13:58:07

什么时候需要定义成类方法,而不是实例方法。

解答:在所有实例属性都通用的时候,就需要定义成类方法,而不是实例方法。

比如说,所有的车都有离合器,这个离合器就属于车类的通用方法,而不需要定义成实例方法再去占用一份内存。

在实际应用中,你可以参考写的登录程序。

当类方法实例化后,每个人的登录用户名和密码都不一样,但是所有人的登录状态都一样。

这个登录状态,就可以写成类方法。

永恒的蓝色梦想 发表于 2020-7-13 14:00:14

比如 dict.fromkeys,这是个类方法,用来创建一个新的 dict 。它并不关心这个实例是什么内容,它只需要创建一个新 dict 就可以了。
但 dict.pop 则不同,它需要从实例里删除内容,所以它只能是实例方法。

白白白白丶白 发表于 2020-7-13 14:12:34

heidern0612 发表于 2020-7-13 13:58
什么时候需要定义成类方法,而不是实例方法。

解答:在所有实例属性都通用的时候,就需要定义成类方法, ...

所有的实例属性通用?

heidern0612 发表于 2020-7-13 14:20:10

白白白白丶白 发表于 2020-7-13 14:12
所有的实例属性通用?

实例属性通用的太多了。

你应该知道,每实例化一次,实例就占用一部分内存空间。

你假如需要实例化一千次,并且这个属性都是通用的,难道就需要创建一千次内存空间吗?


实例属性通用再举个例子,比如说你编写一个学生的类,所有学生的实例都是在某个学校下面。

难道还需要创建一千个实例化的学校吗?所以这种层面只能是类属性通用,而不是实例属性单独用。

白白白白丶白 发表于 2020-7-13 14:27:44

heidern0612 发表于 2020-7-13 13:58
什么时候需要定义成类方法,而不是实例方法。

解答:在所有实例属性都通用的时候,就需要定义成类方法, ...

在所有实例属性都通用的时候,就需要定义成类方法,而不是实例方法。

我的意思是这句话是不是应该是所有实例方法都通用的时候要定义成类方法

heidern0612 发表于 2020-7-13 14:41:48

白白白白丶白 发表于 2020-7-13 14:27
我的意思是这句话是不是应该是所有实例方法都通用的时候要定义成类方法

那倒不是,一般情况下定义成类方法的还是少数。(这里的类方法单纯指的只是那种实例通用的方法或属性。)


类方法实例化后,一般情况下都是各自有各自的空间的。

比如你类方法里面写个血量,实例化后每个人的血量都不同。

这种情况下还是不通用的,你不能说我一个人掉血,所有人都跟着掉血吧。。


页: [1]
查看完整版本: 小问题。类方法