Python中文
首页
教程
问答
标签
搜索
登录
注册
Python属性作为实例属性
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我试图编写一个具有动态属性的类。考虑以下具有两个只读属性的类:</p> <pre><code>class Monster(object): def __init__(self,color,has_fur): self._color = color self._has_fur = has_fur @property def color(self): return self._color @property def has_fur(self): return self._has_fur </code></pre> <p>我想对此进行推广,以便<code>__init__</code>可以使用任意字典并从字典中的每个项创建只读属性。我可以这样做:</p> ^{pr2}$ <p>但是,这有一个严重的缺点:每次我创建<code>Monster</code>的新实例时,实际上是在修改<code>Monster</code>类。我没有为新的<code>Monster</code>实例创建属性,而是有效地将属性添加到<code>Monster</code>的<strong>所有</strong>实例中。要看到这个:</p> <pre><code>>>> hasattr(Monster2,"height") False >>> hasattr(Monster2,"has_claws") False >>> blue_monster = Monster2({"height":4.3,"color":"blue"}) >>> hasattr(Monster2,"height") True >>> hasattr(Monster2,"has_claws") False >>> red_monster = Monster2({"color":"red","has_claws":True}) >>> hasattr(Monster2,"height") True >>> hasattr(Monster2,"has_claws") True </code></pre> <p>这当然有意义,因为我用<code>setattr(self.__class__,key,property(lambda self,key=key: self._traits[key]))</code>显式地添加了属性作为类属性。这里我需要的是可以添加到实例中的属性。(即“实例属性”)。不幸的是,根据我阅读和尝试的所有内容,属性总是类属性,而不是实例属性。例如,这不起作用:</p> <pre><code>class Monster3(object): def __init__(self,traits): self._traits = traits for key,value in traits.iteritems(): self.__dict__[key] = property(lambda self,key=key: self._traits[key]) >>> green_monster = Monster3({"color":"green"}) >>> green_monster.color <property object at 0x028FDAB0> </code></pre> <p>所以我的问题是:“实例属性”是否存在?如果没有,原因是什么?我已经找到了很多关于Python中如何使用属性的信息,但是关于它们是如何实现的却很少。如果“实例属性”没有意义,我想了解原因。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<blockquote> <p>What I need here instead are properties that can be added to the instance.</p> </blockquote> <p>一个<em>property()</em>是一个描述符,它只在存储在类中时有效,而在实例中存储时不起作用。在</p> <p>实现实例属性效果的一个简单方法是do def\u getattr\。这将允许您控制查找的行为。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何根据与其他行比较的列表筛选序列?
1 回答
如何根据与前一行的差异对行进行分组?
4 回答
如何根据与另一个图像匹配的图像特征来变换图像?
3 回答
如何根据与另一个模型的关系在模板视图中查询另一个Django模型
3 回答
如何根据与已知参考轨迹的距离过滤出位置数据?
3 回答
如何根据与现有值比较的下限和上限创建新的pandas系列
3 回答
如何根据与输入字符串共享的特征从数据集中获取值
5 回答
如何根据与长生不老药的多对多关系排序?
3 回答
如何根据世代显示,x'攻击'和y'防御'
8 回答
如何根据两个CSV文件中的公共信息用Python合并两个CSV文件?
9 回答
如何根据两个CSV文件的相似性比较它们的行?
1 回答
如何根据两个不同列的值在一列中填充NaN
10 回答
如何根据两个不同列的日期获取交叉联接表的唯一记录?
10 回答
如何根据两个不同列表中的相应值创建if语句?
2 回答
如何根据两个不同栏目的分数组成三个不同的班级,有人能指导我吗,请参考我的代码
5 回答
如何根据两个不同的字符串检查变量?9行examp
4 回答
如何根据两个值对词典进行分组?
10 回答
如何根据两个列表获得自定义元组的计数
7 回答
如何根据两个变量的条件打印特定输出
9 回答
如何根据两个变量重新采样以均匀地派生类?
5 回答