相关疑难解决方法(0)

Python中的指针?

我知道Python没有指针,但有没有办法有这个收益率2,而不是

>>> a = 1
>>> b = a # modify this line somehow so that b "points to" a
>>> a = 2
>>> b
1
Run Code Online (Sandbox Code Playgroud)


这是一个例子:我希望form.data['field']form.field.value始终拥有相同的价值.这不是完全必要的,但我认为这会很好.


例如,在PHP中,我可以这样做:

<?php

class Form {
    public $data = [];
    public $fields;

    function __construct($fields) {
        $this->fields = $fields;
        foreach($this->fields as &$field) {
            $this->data[$field['id']] = &$field['value'];
        }
    }
}

$f = new Form([
    [
        'id' => 'fname',
        'value' => 'George'
    ],
    [
        'id' => 'lname',
        'value' => …
Run Code Online (Sandbox Code Playgroud)

python pointers

110
推荐指数
7
解决办法
26万
查看次数

Python:使类可迭代

我继承了一个项目,其中包含许多大类,只有类对象(整数,字符串等).我希望能够检查属性是否存在而无需手动定义属性列表.

是否可以使用标准语法使python 本身可迭代?也就是说,我希望能够使用for attr in Foo:(或甚至)迭代所有类的属性,if attr in Foo而无需首先创建类的实例.我想我可以通过定义来做到这一点__iter__,但到目前为止我还没有完全掌握我正在寻找的东西.

我通过添加如下__iter__方法实现了我想要的一些:

class Foo:
    bar = "bar"
    baz = 1
    @staticmethod
    def __iter__():
        return iter([attr for attr in dir(Foo) if attr[:2] != "__"])
Run Code Online (Sandbox Code Playgroud)

但是,这并不能完全满足我的需求:

>>> for x in Foo:
...     print(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'classobj' object is not iterable
Run Code Online (Sandbox Code Playgroud)

即便如此,这仍然有效:

>>> for x in Foo.__iter__():
...     print(x)
bar
baz
Run Code Online (Sandbox Code Playgroud)

python syntax attributes static-methods loops

37
推荐指数
3
解决办法
2万
查看次数

标签 统计

python ×2

attributes ×1

loops ×1

pointers ×1

static-methods ×1

syntax ×1