我有一棵拥有数十万个节点的大树,我正在使用它__slots__来减少内存消耗.我刚刚发现了一个非常奇怪的错误并修复了它,但我不明白我看到的行为.
这是一个简化的代码示例:
class NodeBase(object):
__slots__ = ["name"]
def __init__(self, name):
self.name = name
class NodeTypeA(NodeBase):
name = "Brian"
__slots__ = ["foo"]
Run Code Online (Sandbox Code Playgroud)
然后我执行以下操作:
>>> node = NodeTypeA("Monty")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
AttributeError: 'NodeTypeA' object attribute 'name' is read-only
Run Code Online (Sandbox Code Playgroud)
如果NodeTypeA.name没有定义则没有错误(旁注:该属性是错误的,没有理由在那里).如果NodeTypeA.__slots__从未定义过也没有错误,因此它有一个__dict__.
我不明白的是:为什么超类中存在类变量会干扰在子类的槽中设置实例变量?
任何人都可以解释为什么这种组合导致object attribute is read-only错误?我知道我的例子是人为的,并且不太可能是真实程序中的故意,但这并不会使这种行为变得不那么奇怪.
谢谢,
乔纳森
我正在使用 FastAPI 来@app.websocket监听传入的 websocket。FastAPI(或下面的 Starlette 或 Uvicorn)如何进行 ping/pong 心跳?这是可配置的吗?我根本无法在文档中找到它。
from fastapi import FastAPI, WebSocket
app = FastAPI()
@app.websocket("/")
def ws(websocket: WebSocket):
pass
Run Code Online (Sandbox Code Playgroud)
fastapi使用starlette,并且在幕后似乎使用websockets。websockets.connect默认情况下使用 20 秒的 aping_interval和ping_timeout,但我不知道 FastAPI 中是否使用了它。
我正在使用带有R内核的Jupyter笔记本.当我打印矩形数据时,例如矩阵,它只显示前10列和后10列:
对于data.frames或HTML表格中打印的任何其他对象,也会发生同样的事情.
如何更改此设置?
我有一个包含多列主键(城市/州/日期)和更多数据列的表.我希望得到每个城市/州的最新数据.我如何干净/高效地完成这项工作?现在我可以通过执行第一个查询来获取我正在尝试获取的所有行的列表,然后是第二个带有大量WHERE子句的查询:
SELECT state, city, max(date) from data GROUP BY city, state;
+-------+---------------------+------------+
| state | city | MAX(date) |
+-------+---------------------+------------+
| CA | San Francisco | 2013-09-01 |
| CA | Los Angeles | 2013-08-01 |
| NY | New York | 2013-10-01 |
| ... | ... (many rows) ... | ... |
+-------+---------------------+------------+
SELECT * FROM data WHERE
(state = "CA" AND city = "San Francisco" AND date='2013-09-01') OR
(state = "CA" AND city = "Los Angeles" AND …Run Code Online (Sandbox Code Playgroud)