小编Jon*_*han的帖子

Python,__slots__,继承和类变量==>属性是只读错误

我有一棵拥有数十万个节点的大树,我正在使用它__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错误?我知道我的例子是人为的,并且不太可能是真实程序中的故意,但这并不会使这种行为变得不那么奇怪.

谢谢,
乔纳森

python slots

15
推荐指数
1
解决办法
4091
查看次数

FastAPI websocket ping/pong 超时

我正在使用 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,并且在幕后似乎使用websocketswebsockets.connect默认情况下使用 20 秒的 aping_intervalping_timeout,但我不知道 FastAPI 中是否使用了它。

websocket starlette fastapi uvicorn

10
推荐指数
1
解决办法
8587
查看次数

如何用R增加Jupyter中显示的列数?

我正在使用带有R内核的Jupyter笔记本.当我打印矩形数据时,例如矩阵,它只显示前10列和后10列:

在此输入图像描述

对于data.frames或HTML表格中打印的任何其他对象,也会发生同样的事情.

如何更改此设置?

r jupyter

9
推荐指数
1
解决办法
3104
查看次数

如何在MySQL中通过多列主键选择多行?

我有一个包含多列主键(城市/州/日期)和更多数据列的表.我希望得到每个城市/州的最新数据.我如何干净/高效地完成这项工作?现在我可以通过执行第一个查询来获取我正在尝试获取的所有行的列表,然后是第二个带有大量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)

mysql

7
推荐指数
2
解决办法
5416
查看次数

标签 统计

fastapi ×1

jupyter ×1

mysql ×1

python ×1

r ×1

slots ×1

starlette ×1

uvicorn ×1

websocket ×1