栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python类成员

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python类成员

一个是类属性,而另一个是实例属性。它们是不同的,但是它们之间的紧密联系使它们有时看起来相同。

它与python查找属性的方式有关。有一个层次结构。在简单的情况下,可能看起来像这样:

instance -> Subclass -> Superclass -> object (built-in type)

当您寻找这样的属性时

instance

`instance.val`

…实际发生的是, 首先
,Python

val
在实例本身中进行查找。然后,如果找不到
val
,它将在其类中查找
Subclass
。然后,如果它没有找到
val
那里,它看起来的父母
Subclass
Superclass
。这意味着当您这样做时…

>>> class Foo():    foovar = 10      def __init__(self, val):        self.selfvar = val

…所有

Foo
share 实例
foovar
,但有各自不同
selfvar
的。这是一个简单的具体示例:

>>> f = Foo(5)>>> f.foovar10>>> Foo.foovar10

如果我们不碰

foovar
,则
f
和都相同
Foo
。但是,如果我们改变
f.foovar

>>> f.foovar = 5>>> f.foovar5>>> Foo.foovar10

…我们添加了一个有效遮罩的值的实例属性

Foo.foovar
。现在,如果我们
Foo.foovar
直接进行更改,则不会影响我们的
foo
实例:

>>> Foo.foovar = 7>>> f.foovar5

但这确实会影响一个新

foo
实例:

>>> Foo(5).foovar7

还请记住,可变对象增加了另一层间接寻址(正如mgilson提醒我的那样)。在这里,与

f.foovar
指代相同的对象
Foo.foovar
,因此当您更改对象时,更改将沿层次结构传播:

>>> Foo.foovar = [1]>>> f = Foo(5)>>> f.foovar[0] = 99>>> Foo.foovar[99]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650736.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号