问题标签 [python-datamodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
2840 浏览

python - Python 自省:如何获取对象属性的“未排序”列表?

以下代码

输出

如何让它按照代码中定义这些类的顺序输出?IE

除了使用 inspect.getsource(A) 并解析之外,还有其他方法吗?

0 投票
6 回答
706 浏览

python - 查看目录中列出的属性和方法列表时,您如何知道哪些是属性,哪些是方法?

我正在努力学习用 Python 编程,并专注于更好地处理如何使用标准和其他模块。dir 函数在解释器中似乎非常强大,但我想知道我是否因为缺乏 OOP 背景而遗漏了什么。使用 S.Lotts 的书,我决定使用他的 Die 类来学习更多关于语法以及类和实例的使用。

这是原始代码:

我正在查看它,在创建了一些实例之后,我想知道单词 value 是否是关键字,以及 class 语句中单词 object 的用途是什么,因此我决定通过将类定义更改为以下内容来找出答案:

这种变化表明我从我的实例中得到了相同的行为,但是当我执行 dir 时,实例中缺少以下方法/属性:

我还发现当我在一个实例上做一个目录时,我有一个额外的关键字ban,我最终发现它是我实例的一个属性。这帮助我了解我可以使用d1.ban来访问我的实例的值。我能弄清楚这是一个属性的唯一原因是我输入了d1.happy并得到了一个AttributeError 我发现d1.GetValue是一个附加到 Die 的方法,因为这是解释器告诉我的。

因此,当我尝试使用诸如 BeautifulSoup 之类的复杂但有用的模块时,在键入dir(instance)后,我如何知道列出的哪些内容是我的实例的属性或我的实例的方法。我需要知道这一点,因为这种探索告诉我,我使用属性调用方法的结果,使用方法调用实例上的函数。

这个问题可能太罗嗦了,但它确实帮助我更好地理解了属性和方法之间的区别。具体来说,当我查看在 Die 类的实例上调用 dir 的结果时,我看到了这个

因此,通过查看该列表来了解哪些是属性和哪些是方法似乎很有用,而不必诉诸试验和错误或导致输入hasattr(myInstance,suspectedAttributeName)

发布问题后,我尝试了

严格来说,它告诉我所有方法都是属性。但我不能调用没有()的方法,所以在我看来 hasattr() 具有误导性。

0 投票
7 回答
2396 浏览

python - 如果你实现 __getattribute__ 有没有办法访问形式参数

似乎__getattribute__只有 2 个参数(self, name)

但是,在实际代码中,我拦截的方法实际上是带参数的。

无论如何可以访问这些论点吗?

谢谢,

查理

0 投票
4 回答
5729 浏览

python - 循环 Python / IronPython 对象方法

遍历 Python 对象的方法并调用它们的正确方法是什么?

给定对象:

0 投票
3 回答
9671 浏览

python - 在python中获取对象的父命名空间?

在 python 中,可以使用 '.' 为了访问对象的字典项。例如:

从上面的例子中,有一个'a'对象,是否有可能从中获得对'obj'的引用,它是分配给'foo'方法的父命名空间?比如把obj.b改成2?

0 投票
6 回答
64211 浏览

python - 获取定义方法的类

如何获取在 Python 中定义方法的类?

我希望以下示例打印“ __main__.FooClass”:

0 投票
2 回答
4489 浏览

python - 应用于列表的乘法运算符(数据结构)

我正在阅读如何像计算机科学家一样思考,这是“Python 编程”的介绍性文本。

我想澄清乘法运算符 ( *) 应用于列表时的行为。

考虑函数make_matrix

实际输出为

make_matrix的正确版本 是:

make_matrix的第一个版本失败的原因(如书中 9.8 中所述)是

...每一行都是其他行的别名...

我想知道为什么

原因...每一行都是其他行的别名...

但不是

即为什么每一[0]行都不是其他行元素的别名。

0 投票
4 回答
14165 浏览

python - 在 Python 中遍历列表时删除元素

在 Java 中,我可以使用 anIterator然后使用迭代器的.remove()方法来删除迭代器返回的最后一个元素,如下所示:

我将如何在 Python 中做到这一点?在 for 循环中迭代列表时,我无法修改列表,因为它会导致内容被跳过(请参见此处)。而且似乎没有Iterator与Java接口等效的东西。

0 投票
4 回答
1072 浏览

php - CakePHP中基于三级关系查询数据

我建立了以下关系:

现在,对于给定的 A,我需要所有带有 B 的 C。我可以编写 SQL 查询,但是正确的 CakePHP 方式是什么?我在哪个模型上调用什么方法,使用哪些参数?

0 投票
1 回答
144 浏览

python - 和我一起解密 MultiplierFactory

本周在 comp.lang.python 上, Steven D'Aprano发布了一段“有趣”的代码,作为对家庭作业问题的开玩笑回答。这里是:

我们知道这twice相当于答案:

从名称中MultiplierMultiplierFactory我们可以了解代码在做什么,但我们不确定确切的内部结构。让我们先简化它。

逻辑

not factor is not None is True等价于not factor is not None, 这也是factor is None. 结果:

到目前为止,这很容易:)

属性访问

另一个有趣的地方是好奇的factor访问器。

在初始化期间MultiplierFactoryself.__factor设置。但稍后,代码访问self.factor.

然后似乎:

正在做的正是“ self.__factor”。

我们可以总是以这种方式访问​​属性吗?

动态改变函数签名

无论如何,在这一点上,这是简化的代码:

代码现在几乎是干净的。唯一令人费解的可能是:

里面有什么?我查看了数据模型文档,发现它func_defaults是“一个元组,其中包含那些具有默认值的参数的默认参数值,或者如果没有参数具有默认值,则为 None ”。我们只是 factor 在这里更改参数的默认值 __init__ 吗?生成的代码将是:

这意味着动态设置默认值只是无用的噪音,因为Multiplier在没有默认参数的情况下永远不会被调用,对吧

我们可能可以将其简化为:

正确的?

对于那些急于“这不是一个真正的问题”的人......再读一遍,我的问题是粗体+斜体