_()内部和外部变量之间的差异

_()内部和外部变量之间的差异

除了名字以外,这些类之间有什么区别吗?

class WithClass ():
    def __init__(self):
        self.value = "Bob"
    def my_func(self):
        print(self.value)class WithoutClass ():
    value = "Bob"

    def my_func(self):
        print(self.value)

如果我使用或不使用__init__方法来声明变量。value?

我主要担心的是,我会以一种方式使用它,而这会给我带来更多的问题。



狐的传说
浏览 309回答 3
3回答

翻过高山走不出你

外部变量集__init__属于这个班。它们被所有的实例所共享。内部创建变量__init__(和所有其他方法函数)并以self.属于对象实例。

开心每一天1111

无我创建一些对象:class foo(object):     x = 'original class'c1, c2 = foo(), foo()我可以更改c1实例,它不会影响c2实例:c1.x = 'changed instance'c2.x>>> 'original class'但是,如果我更改foo类,那么该类的所有实例也将被更改:foo.x = 'changed class'c2.x>>> 'changed class'这里请注意Python作用域是如何工作的:c1.x>>> 'changed instance'带着自己更改类不影响实例:class foo(object):     def __init__(self):         self.x = 'original self'c1 = foo()foo.x = 'changed class'c1.x>>> 'original self'

蝴蝶不菲

我想在我在这个帖子中读到的回复中添加一些内容这条线(指这个)。免责声明:这句话来自我所做的实验。外部变量__init__:这些其实是,静态类变量因此,对类的所有实例都是可访问的。内部变量__init__:这些的价值实例变量只能访问手头的实例(通过self参考)我的贡献:程序员在使用静态类变量是他们可以被实例变量(如果您正在访问静态类变量穿过self参考资料)。解释:以前,我认为两种声明变量的方法完全相同(愚蠢的我),部分原因是我可以通过self推荐信。现在,当我遇到麻烦时,我研究了这个话题,并把它弄清楚了。访问问题静态类变量穿过self引用是它只引用静态类变量如果没有实例变量使用相同的名称,更糟糕的是,尝试重新定义静态类变量穿过self引用不起作用,因为实例变量创建,然后将以前可访问的阴影隐藏起来。静态类变量.为了解决这个问题,你应该经常参考静态类变量通过全班的名字。例:#!/usr/bin/env pythonclass Foo:     static_var = 'every instance has access'     def __init__(self,name):         self.instance_var = 'I am %s' % name    def printAll(self):         print 'self.instance_var = %s' % self.instance_var        print 'self.static_var = %s' % self.static_var        print 'Foo.static_var = %s' % Foo.static_var f1 = Foo('f1')f1.printAll()f1.static_var = 'Shadowing static_var'f1.printAll()f2 = Foo('f2')f2.printAll()Foo.static_var = 'modified class'f1.printAll()f2.printAll()输出量:self.instance_var = I am f1 self.static_var = every instance has accessFoo.static_var = every instance has access self.instance_var = I am f1 self.static_var = Shadowing static_varFoo.static_var = every instance has access self.instance_var = I am f2 self.static_var = every instance has accessFoo.static_var = every instance has access self.instance_var = I am f1 self.static_var = Shadowing static_varFoo.static_var = modified classself.instance_var = I am f2 self.static_var = modified classFoo.static_var = modified class我希望这对某人有帮助
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python