为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2019-07-26 15:14:09
_()内部和外部变量之间的差异除了名字以外,这些类之间有什么区别吗?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?我主要担心的是,我会以一种方式使用它,而这会给我带来更多的问题。
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

外部变量集__init__属于这个班。它们被所有的实例所共享。

内部创建变量__init__(和所有其他方法函数)并以self.属于对象实例。


查看完整回答
反对 回复 2019-07-27
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

无我

创建一些对象:

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'



查看完整回答
反对 回复 2019-07-27
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

我想在我在这个帖子中读到的回复中添加一些内容这条线(指这个)。

免责声明:这句话来自我所做的实验。

外部变量__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

我希望这对某人有帮助




查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 308 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信