gpt4 book ai didi

python - 解读 Django 源代码

转载 作者:太空狗 更新时间:2023-10-30 00:41:34 25 4
gpt4 key购买 nike

我正在查看一些 Django 源代码并遇到了 this . encoding = property(lambda self: self.file.encoding) 究竟是做什么的?

最佳答案

其他两个答案没什么问题,但可能有点高级。所以这是 101 版本:

lambda

虽然它在他们的 C# 文档中,但我认为 Microsoft 实际上对 lambda 的概念有最好的解释:

A lambda expression is an anonymous function that can contain expressions and statements

大多数没有正式 CS 学位的人都会使用 lambda,但当您将其简单地视为“匿名函数”时,我认为它会变得更容易理解。 Python 中 lambda 的格式是:

lambda [argument]: [expression]

[argument] 可以什么都不是,可以是单个参数或逗号分隔的参数列表,[expression] 本质上是方法体。这就是为什么@Jordan 说你提到的代码大致相当于:

def encoding(self):
return self.file.encoding

self 是传递给方法的参数,方法的返回值 (self.file.encoding) 是表达式。

属性

property 方法允许您为类的属性创建“getter”和“setter”。在传统的 OOP 中,“成员”或类的属性通常设置为 protected 或私有(private)的——您实际上永远不会直接访问该属性。相反,您访问的方法反过来会检索或操作属性。其中最主要的是获取 setter和getter 。顾名思义,它们是分别获取和设置属性值的方法。

现在,Python OOP 并没有真正意义上的 protected 或私有(private)属性的概念。您可以自由遵守规则,但没有什么能阻止您在类里面访问您想要的任何内容。因此,在 Python 中,getter 和 setter 通常与 property 结合使用以“伪造”一个属性,因为找不到更好的词了。例如:

def get_foo(self):
return self.bar

def set_foo(self, value):
self.bar = value

foo = property(get_foo, set_foo)

有了它,我现在可以做 instance.foo(无括号)和 instance.foo = 'something' 之类的事情。它的工作方式就像 foo 是类的常规属性一样。

在你提到的代码中,他们只是设置了一个 setter/getter ,但它的工作原理是一样的。 encoding 将充当类的属性并返回 file.encoding 的值。

关于python - 解读 Django 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10613236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com