- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想做如下的事情:
class Foo(object):
def __init__(self):
self.member = 10
pass
def factory(foo):
foo = Foo()
aTestFoo = None
factory(aTestFoo)
print aTestFoo.member
但是它因 AttributeError: 'NoneType' object has no attribute 'member'
而崩溃:对象 aTestFoo
在函数 factory
的调用中没有被修改。
执行该操作的 pythonic 方式是什么?这是要避免的模式吗?如果是当前错误,怎么称呼?
在 C++ 中,在函数原型(prototype)中,我会添加对要在工厂中创建的指针的引用...但也许这不是我应该在 Python 中考虑的事情。
在 C# 中,有关键字 ref
允许修改引用本身,非常接近 C++ 方式。我对 Java 一无所知……但我对 Python 很感兴趣。
最佳答案
Python 没有通过引用传递。顺便说一句,这是它与 Java 共享的少数东西之一。有些人将 Python 中的参数传递描述为按值调用(并将值定义为引用,其中引用的含义与 C++ 中的含义不同),有些人将其描述为按引用传递,我觉得这很值得怀疑(他们重新定义了它)使用 Python 所谓的“引用”,并最终得到与几十年来已知的通过引用传递无关的东西,其他人则使用未被广泛使用和滥用的术语(流行的例子是“通过{object,sharing}"{pass,call}")。参见 Call By Object在 effbot.org 上对各种术语的定义、历史以及一些关于按引用传递和按值传递的术语的争论中的缺陷进行了相当广泛的讨论。
短篇小说,没有命名,是这样的:
您可能认为这就像在 C 中使用指针,但不是指向指针的指针(但有时是指向包含指针的结构的指针)。然后按值传递这些指针。但是不要过多解读这个比喻。 Python 的数据模型与 C 的数据模型有很大不同。
关于Python 和引用传递。局限性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12797749/
我想做如下的事情: class Foo(object): def __init__(self): self.member = 10 pass def facto
我是一名优秀的程序员,十分优秀!