我试图填补我对 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)
实例之间有什么内在区别允许后者具有可分配的属性?B
object
我正在为我的库创建一个共享的 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.so
libraries
尽管在kwarg中指定,但无处可寻Extension()
。
它确实存在于 kwarg 中指定的位置runtime_library_dirs …
我有一个非常简单的 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 时,我还可以看到只保存了第一个:
这里有什么问题?
基本上,我的页面上有一个数字输入字段,我希望用户只能在字段中插入4位数字.我知道我可以这样做:
<input type="number" max="9999">
Run Code Online (Sandbox Code Playgroud)
但是只有当我按下"提交"按钮时,浏览器才会检查输入是否正确.我想要做的是:假设用户在框中键入"1234",然后他尝试键入"1"或任何其他数字.我希望他不能那样做.基本上当他一直按下任何按钮/字母时,我希望它们不会出现在框中.
我怎样才能做到这一点?
当我加载页面时,会创建一个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)
并非所有元素都被删除.为什么?
谢谢.
我的页面上有两个<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)
有什么解决办法吗?谢谢。
onmouseover
我正在开发一个 Chrome 扩展程序,并向页面上的每个图像添加一个处理程序。当用户将鼠标悬停在图像上时,它的 URL 应存储在变量中。src
我知道我可以轻松获取图像属性的值,但我想要完整的 URL。该src
属性存储图像在服务器上的路径。例如,当您在 Google Chrome 中右键单击图像时,您会看到“复制图像 URL”选项,该选项会将图像的 URL 复制到剪贴板。
有什么办法可以实现这一点吗?谢谢。
我的页面上有一个文件输入:
<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)
但后来我甚至无法选择文件,因为窗口甚至没有打开.
有解决方案吗 谢谢.
我的页面上有一个<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) 这是我的.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-a
为C-a
,它将起作用(ctrl+ a)。
我究竟做错了什么?
所以,基本上我正在尝试创建一个简单的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()每秒调用它
我怎么做简单(非硬编码)的方式?
我有以下代码将 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 ×7
html ×5
image ×2
python ×2
cookies ×1
css ×1
distutils ×1
dom-events ×1
for-in-loop ×1
for-loop ×1
formatting ×1
forms ×1
html-input ×1
html5 ×1
http ×1
http-headers ×1
input ×1
keyboard ×1
keycode ×1
margin ×1
node.js ×1
nodelist ×1
numbers ×1
python-3.x ×1
setup.py ×1
textarea ×1
timer ×1
tmux ×1
url ×1