找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1533|回复: 0

[求助] 《流畅的python》自定义类的一个问题

1

主题

1

帖子

1

积分

贫民

积分
1
擎墨c 发表于 2019-4-18 21:57:45 | 显示全部楼层 |阅读模式
《流畅的python》第十章中定义了一个名为vector的自定义类表示多维向量,它实现了__init__、__eq__、__getitem__、__getattr__等,但没有__setitem__,其中__getattr__是以‘xyzt'来显示前4维向量。类中部分代码如下shortcut_names = 'xyzt'
def __getattr__(self,name):
    cls = type(self)
    if len(name) == 1:
        pos = cls.shortcut_names.find(name)
        if 0 <= pos < len(self._components): #self._components为向量
              return self._components[pos]
    msg = ……
    raise AttributeError……
在交互台里
>>> a = vector([1,2,3])
>>>a.x, a.y , a.z
>>>1, 2, 3
但是令a.x=4
>>>a.x = 4
>>>a
>>>vectorarray(1,2,3)
>>>a.x
>>>4
可以看到a并没有被改变,但是a.x变成了4。>>>dir(a)会发现多了个 a.x
问题:
1.这叫什么现象,什么原因?
2.如何避免出现这种情况?
3.跟猴子补丁有何不同?
求大神指点!~



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表