相关疑难解决方法(0)

如何创建对象并向其添加属性?

我想在Python中创建一个动态对象(在另一个对象内),然后为其添加属性.

我试过了:

obj = someobject
obj.a = object()
setattr(obj.a, 'somefield', 'somevalue')
Run Code Online (Sandbox Code Playgroud)

但这没用.

有任何想法吗?

编辑:

我从for循环中设置属性,循环遍历值列表,例如

params = ['attr1', 'attr2', 'attr3']
obj = someobject
obj.a = object()

for p in params:
   obj.a.p # where p comes from for loop variable
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我会得到obj.a.attr1,obj.a.attr2,obj.a.attr3.

我使用了这个setattr函数因为我不知道怎么做obj.a.NAME一个for循环.

如何根据p上面示例中的值设置属性?

python attributes class object

279
推荐指数
9
解决办法
30万
查看次数

无法设置对象类的属性

所以,我在回答这个问题时正在玩Python ,我发现这是无效的:

o = object()
o.attr = 'hello'
Run Code Online (Sandbox Code Playgroud)

由于AttributeError: 'object' object has no attribute 'attr'.但是,对于从object继承的任何类,它是有效的:

class Sub(object):
    pass

s = Sub()
s.attr = 'hello'
Run Code Online (Sandbox Code Playgroud)

打印s.attr按预期显示"你好".为什么会这样?Python语言规范中的内容指定您不能将属性分配给vanilla对象?

python attributes language-design

81
推荐指数
2
解决办法
1万
查看次数

为什么我不能直接向任何python对象添加属性?

我有这个代码:

>>> class G:
...   def __init__(self):
...     self.x = 20
...
>>> gg = G()
>>> gg.x
20
>>> gg.y = 2000
Run Code Online (Sandbox Code Playgroud)

这段代码:

>>> from datetime import datetime
>>> my_obj = datetime.now()
>>> my_obj.interesting = 1
*** AttributeError: 'datetime.datetime' object has no attribute 'interesting'
Run Code Online (Sandbox Code Playgroud)

根据我的Python知识,我会说datetime覆盖setattr/ getattr,但我不确定.你能在这里说清楚吗?

编辑:我不是特别感兴趣datetime.我总是想知道对象.

python attributes object

21
推荐指数
2
解决办法
8749
查看次数

Python语言问题:object()与Function的属性

在python中,为这样的对象实例创建新属性是非法的

>>> a = object()
>>> a.hhh = 1
Run Code Online (Sandbox Code Playgroud)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'hhh'
Run Code Online (Sandbox Code Playgroud)

但是,对于一个函数对象,它是可以的.

>>> def f():
...   return 1
...
>>> f.hhh = 1
Run Code Online (Sandbox Code Playgroud)

这种差异背后的理由是什么?

python function object

17
推荐指数
2
解决办法
1322
查看次数

内置对象的属性分配

这有效:

class MyClass(object):
    pass

someinstance = MyClass()
someinstance.myattribute = 42
print someinstance.myattribute
>>> 42
Run Code Online (Sandbox Code Playgroud)

但这不是:

someinstance = object()
someinstance.myattribute = 42
>>> AttributeError: 'object' object has no attribute 'myattribute'
Run Code Online (Sandbox Code Playgroud)

为什么?我有一种感觉,这与对象是一个内置类有关,但我发现这不令人满意,因为我在MyClass的声明中没有改变.

python attributes initialization self

9
推荐指数
2
解决办法
2506
查看次数

是什么让用户定义的对象不在Python中抛出AttributeError?

可能重复:
为什么我不能直接向任何python对象添加属性?
为什么不能在python中向对象添加属性?

以下代码不会抛出AttributeError

class MyClass():
    def __init__(self):
        self.a = 'A'
        self.b = 'B'
my_obj = MyClass()
my_obj.c = 'C'
Run Code Online (Sandbox Code Playgroud)

这与之形成鲜明对比

>>> {}.a = 'A'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'a'
Run Code Online (Sandbox Code Playgroud)

有什么区别?它是关于dict是一个内置类,而MyClass是用户定义的吗?

python oop

5
推荐指数
1
解决办法
223
查看次数

为什么我不能将任意成员添加到对象实例?

我才意识到:

class A(object): pass

a = A()
a.x = 'whatever'
Run Code Online (Sandbox Code Playgroud)

Works(不会引发错误并创建新x成员).

但是这个:

a = object()
a.x = 'whatever'
Run Code Online (Sandbox Code Playgroud)

举:

AttributeError: 'object' object has no attribute 'x'
Run Code Online (Sandbox Code Playgroud)

虽然我可能永远不会在实际生产代码中使用它,但我对于不同行为的原因有点好奇.

任何提示?

python

5
推荐指数
1
解决办法
101
查看次数