小编Bog*_* M.的帖子

是什么允许裸类实例具有可分配的属性?

我试图填补我对 Python 对象和类如何工作的理解上的空白。


object实例不支持以任何方式分配属性:

> object().a = 5
# or
> setattr(object(), 'a', 5)

AttributeError: 'object' object has no attribute 'a'
Run Code Online (Sandbox Code Playgroud)

我认为这是因为裸object实例不具有__dict__属性:

> '__dict__' in dir(object())

False
Run Code Online (Sandbox Code Playgroud)

然而,裸object实例确实有一个定义的__setattr__属性,所以这对我来说有点令人困惑:

> '__setattr__' in dir(object())

True
Run Code Online (Sandbox Code Playgroud)

另一方面,常规空类的实例具有属性分配的全部能力:

class B(object):
    pass

> B().a = 5
> setattr(B(), 'a', 5)
Run Code Online (Sandbox Code Playgroud)

我的问题是:如果直接继承的话object,实例和class B(object)实例之间有什么内在区别允许后者具有可分配的属性?Bobject

python python-3.x

11
推荐指数
1
解决办法
331
查看次数

Python3 共享扩展不链接库依赖项

我正在为我的库创建一个共享的 Python 扩展,并使用distutils它来构建它。

这些是我的相关部分setup.py

import distuitls.core as dc
from os.path import join as path_join

module = dc.Extension(module_name, 
                      sources = [path_join(meson_src_root, "py3_bindings", "module.c")], 
                      include_dirs = [path_join(meson_src_root, "include")],
                      libraries = ["bbmputil"],
                      runtime_library_dirs = [meson_build_root])

dc.setup(name = module_name,
         version = module_version,
         description = "Python3 bindings for the bbmp_utils library",
         ext_modules = [module])
Run Code Online (Sandbox Code Playgroud)

运行$ setup.py build结果会成功构建共享扩展模块,但它没有与"bbmputil"库链接。

$ ldd build/lib.linux-x86_64-3.8/bbmp_utils.cpython-38-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)
linux-vdso.so.1 (0x00007ffc85ce1000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f49f0d70000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f49f0f74000)
Run Code Online (Sandbox Code Playgroud)

libbbmputil.solibraries尽管在kwarg中指定,但无处可寻Extension()

它确实存在于 kwarg 中指定的位置runtime_library_dirs …

python distutils setup.py

6
推荐指数
1
解决办法
2250
查看次数

Chrome 仅设置“Set-Cookie”标头中的第一个 cookie

我有一个非常简单的 http nodejs 服务器:

require('http').createServer(function(req, res) {
    res.statusCode = 200;
    res.setHeader('Set-Cookie', 'age=44; name=ok; something=else; path=/');
    res.end('ok ok ok', 'utf8');
}).listen(9999);
Run Code Online (Sandbox Code Playgroud)

在最新版本的 Chrome 中访问页面时,这些是从服务器发送的响应标头:

服务器响应标头

因此,服务器发送了正确的cookie。然而,浏览器似乎只存储第一个(age=44)。如果我再次刷新页面,这些是发送到服务器的请求标头:

服务器请求头

age=44仅发送第一个 cookie ( )。登录document.cookie控制台也只返回'age=44'.

当从 Chrome 的 UI 检查 cookie 时,我还可以看到只保存了第一个:

这里有什么问题?

Chrome 用户界面 cookie

cookies google-chrome http http-headers node.js

5
推荐指数
1
解决办法
1562
查看次数

如何限制html号码输入(直播)中允许的数字量?

基本上,我的页面上有一个数字输入字段,我希望用户只能在字段中插入4位数字.我知道我可以这样做:

<input type="number" max="9999">
Run Code Online (Sandbox Code Playgroud)

但是只有当我按下"提交"按钮时,浏览器才会检查输入是否正确.我想要做的是:假设用户在框中键入"1234",然后他尝试键入"1"或任何其他数字.我希望他不能那样做.基本上当他一直按下任何按钮/字母时,我希望它们不会出现在框中.

我怎样才能做到这一点?

html javascript html5 numbers input

4
推荐指数
1
解决办法
563
查看次数

for ... in循环不循环遍历所有属性?

当我加载页面时,会创建一个nodeList,它看起来像这样:

[text, h4, text, span, br, input, br, span, br, input, br, span, br, input, br, span, br, input, br]
Run Code Online (Sandbox Code Playgroud)

我创建了一个for循环遍历所有这些元素的简单循环,并从DOM中删除它们中的每一个.(所有元素都在a <section>)

这是循环:

        for(element in videoTitlesElement.childNodes){
            if(!isNaN(element)){
                videoTitlesElement.removeChild(
                        videoTitlesElement.childNodes[element]);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但是,在循环结束时,nodeList如下所示:

[h4, span, input, span, input, span, input, span, input]
Run Code Online (Sandbox Code Playgroud)

并非所有元素都被删除.为什么?

谢谢.

javascript for-loop nodelist for-in-loop

4
推荐指数
1
解决办法
155
查看次数

为什么这张图片上有右边距?

我的页面上有两个<button>元素,里面都有一个<img>。问题是这两个图像都有右边距。即使我没有在任何地方添加它。我仔细检查了代码两次,并且还确保手动从图像中排除右边距:

button img {
  margin-right: 0px;
}
Run Code Online (Sandbox Code Playgroud)

这是打开开发者工具的屏幕截图(Chrome)

在此输入图像描述

当我将鼠标悬停在边距框上时,您可以看到边距,但您也可以看到margin-right图像的边距是0px

右图也会出现这种情况。我正在使用 Bootstrap,如果这有什么区别的话。

带有按钮和图像的代码:

<section class="container-fluid" id="upload-buttons">   
  <button><img src="camera128.png" class="img-responsive" alt="Camera Clipart">Upload Image</button>
  <button><img src="video128.png" class="img-responsive" alt="Video Recorder Clipart">Upload Video</button>
</section>
Run Code Online (Sandbox Code Playgroud)

有什么解决办法吗?谢谢。

html css image margin twitter-bootstrap

3
推荐指数
1
解决办法
4361
查看次数

如何在 JavaScript 中获取图像的 URL?

onmouseover我正在开发一个 Chrome 扩展程序,并向页面上的每个图像添加一个处理程序。当用户将鼠标悬停在图像上时,它的 URL 应存储在变量中。src我知道我可以轻松获取图像属性的值,但我想要完整的 URL。该src属性存储图像在服务器上的路径。例如,当您在 Google Chrome 中右键单击图像时,您会看到“复制图像 URL”选项,该选项会将图像的 URL 复制到剪贴板。

有什么办法可以实现这一点吗?谢谢。

javascript url image google-chrome-extension

3
推荐指数
1
解决办法
4万
查看次数

使用<input type ="file>选择文件时如何防止表单提交?

我的页面上有一个文件输入:

<input type="file" id="file-main" style="display:none;" name="file-main">
Run Code Online (Sandbox Code Playgroud)

我有一个标签指向那个输入:

<button class="main-button" id="file-choose-btn"><lable for="file-main">Choose Image</lable></button>
Run Code Online (Sandbox Code Playgroud)

但是当我按下按钮(选择文件)时,表单立即被提交,并尝试执行PHP文件(即表单的"动作").我还没有该文件,因此它返回HTTP 404错误.

基本上,我的问题是,如何在单击(或本例中的按钮)后阻止执行表单.

我尝试使用事件处理程序来阻止事件的默认操作:

document.getElementById("file-choose-btn").onclick = function(e){
            e.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)

但后来我甚至无法选择文件,因为窗口甚至没有打开.

有解决方案吗 谢谢.

html javascript forms html-input preventdefault

2
推荐指数
1
解决办法
1258
查看次数

如何格式化 HTML &lt;textarea&gt; 中的文本?

我的页面上有一个<textarea>,当我单击按钮时,textarea 中的文本值分配给页面上某个段落的.innerHTML 。

现在假设我在文本区域中输入如下内容:

Hey
how's
it
going
?
Run Code Online (Sandbox Code Playgroud)

该段落看起来像这样

Hey how's it going ?
Run Code Online (Sandbox Code Playgroud)

基本上,每行末尾不会有<br>标签。有没有办法强制 JavaScript 函数在文本区域每行的末尾插入<br>标签,或者有​​更简单的方法来做到这一点?

JavaScript 代码:

document.getElementById("sendMsgBtn").onclick = function(){
    var element = document.createElement("p");
    element.style.borderBottom = "1px solid black";
    var content = document.createTextNode(document.getElementById("currentMsg").value);
    content = content.replace(/\n/g, "<br>");
    element.appendChild(content);
    document.body.appendChild(element);
    document.getElementById("currentMsg").value = "";
}
Run Code Online (Sandbox Code Playgroud)

html javascript formatting textarea

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

在 .tmux.conf 中绑定 Shift 键不起作用

这是我的.tmux.conf文件,放置在主目录中。

unbind C-b
set -g prefix S-a
bind S-a send-prefix
bind r source-file ~/.tmux.conf
Run Code Online (Sandbox Code Playgroud)

我正在正确加载它tmux source-file ~/.tmux.conf。但是,shift+a启动前缀不起作用。

但是,如果我替换S-aC-a,它将起作用(ctrl+ a)。

我究竟做错了什么?

tmux

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

如何创建一个简单的JavaScript计时器?

所以,基本上我正在尝试创建一个简单的JS计时器,它将在00:30开始,一直到00:00,然后消失.

我已经有了HTML代码:

<div id="safeTimer">
<h2>Safe Timer</h2>
<p id="safeTimerDisplay">00:30</p>
</div>
Run Code Online (Sandbox Code Playgroud)

显示计时器的元素显然是段落.现在我知道如果我用硬编码的方式做这个会很容易:我只会创建一个能改变段落的innerHTML的函数("00:30","00:29","00:28") "等,然后使用setInterval()每秒调用它

我怎么做简单(非硬编码)的方式?

html javascript timer

0
推荐指数
2
解决办法
8474
查看次数

CTRL keyCode (17) 在 JavaScript 中不起作用?

我有以下代码将 eventListener 添加到 HTML textarea。它应该控制台记录按下的键码,并且,如果键码是 == 到 17 (CTRL),则控制台记录“您按下了 CTRL。”。出于某种原因,当我在 textarea 中按下 CTRL 时,它不是控制台记录按下的 keyCode,也不是“你按下了 CTRL”。例如,如果我按“A”,控制台日志返回“97”,这是正确的。它也适用于所有其他字母。

这是代码:

document.getElementById("msgBox").addEventListener("keypress",function(e){
    console.log(e.keyCode);
    if(e.keyCode == 17){
        console.log("You pressed CTRL.");
    }
});
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

更新:它也不适用于其他特殊键,如“shift、Fx、alt、home 等。

文本区域的 HTML :

<textarea id="msgBox" placeholder="Enter your message" autofocus></textarea>
Run Code Online (Sandbox Code Playgroud)

javascript keyboard keycode addeventlistener dom-events

0
推荐指数
1
解决办法
1030
查看次数