gpt4 book ai didi

python - <类名> 之间的区别。 和 self. 在 python 类中

转载 作者:行者123 更新时间:2023-11-28 22:56:18 24 4
gpt4 key购买 nike

我想知道这两个类中的 Foo.var= user input 和 self.var= userinput 之间有什么区别。

class foo():
var=None

def __init__(self,userinput):
foo.var=userinput


class bar():
var=None

def __init__(self,userinput):
self.var=userinput

最佳答案

fooself对象

类成员是类的属性(因此在该类的所有对象之间共享),而实例成员是特定对象的属性,因此对实例成员的更改只会影响给定的对象。

当您对一个对象进行操作时,它所拥有的成员是 成员和实例 成员的合并。当定义两个同名成员时,实例成员优先。

因此:

  • bar 设置一个实例变量;该更改仅对当前实例有效,因此如果您这样做:

    b=bar(10)
    c=bar(20)

    你会看到 c.var20b.var10;这里没什么奇怪的;

  • foo 设置一个类变量,对所有实例都是通用的;所以,如果你这样做:

    f=foo(10)
    g=foo(20)

    你会看到 f.varg.var 都是 20,因为它们实际上都引用了 foo.var,在 g 的构造函数中最后设置为 20

  • 另一方面,实例变量影响类变量;所以,如果你这样做

    f=foo(10)
    g=foo(20)
    f.var=30

    你将拥有 g.var==foo.var==20,但是 f.var==30,从现在开始 f.var 指的是实例变量 f.var; 但是,如果你这样做

    del f.var

    现在实例(f 的)属性 var 不再存在,因此 f.var 再次引用 类属性 var(因此f.var==g.var==foo.var==20)。


长话短说:通常你会想要使用self.var(即实例成员); classname.var 仅用于在给定类的所有实例之间共享内容。

关于python - <类名> 之间的区别。 <var name> 和 self.<var name> 在 python 类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com