我正在阅读'Dive Into Python',并在关于类的章节中给出了这个例子:
class FileInfo(UserDict):
"store file metadata"
def __init__(self, filename=None):
UserDict.__init__(self)
self["name"] = filename
Run Code Online (Sandbox Code Playgroud)
然后,作者说如果要覆盖该__init__
方法,则必须__init__
使用正确的参数显式调用父级.
FileInfo
班有一个以上的祖先课怎么办?
__init__
方法? 我正在寻找一种向后打印字符串的方法,在谷歌上快速搜索之后,我发现了这种方法:
假设'a'是一个字符串变量.这将向后返回'a'字符串:
a[::-1]
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这是如何工作
这是我正在使用的结构:
directory/
script.py
subdir/
__init__.py
myclass01.py
myclass02.py
Run Code Online (Sandbox Code Playgroud)
我想要做的就是在script.py中定义的类进口myclass01.py
和myclass02.py
.如果我做:
from subdir.myclass01 import *
Run Code Online (Sandbox Code Playgroud)
它适用于定义的类myclass01.py
.但是使用这个解决方案,如果在不同的文件中定义了许多类,subdir
并且我想要导入所有这些类,我必须为每个文件键入一行.必须有一个捷径.我试过了:
from subdir.* import *
Run Code Online (Sandbox Code Playgroud)
但它没有成功.
编辑:这是文件的内容:
这是__init__.py
(使用__all__
Apalala建议):
__all__ = ['MyClass01','MyClass02']
Run Code Online (Sandbox Code Playgroud)
这是myclass01.py
:
class MyClass01:
def printsomething():
print 'hey'
Run Code Online (Sandbox Code Playgroud)
这是myclass02.py
:
class MyClass02:
def printsomething():
print 'sup'
Run Code Online (Sandbox Code Playgroud)
这是script.py
:
from subdir import *
MyClass01().printsomething()
MyClass02().printsomething()
Run Code Online (Sandbox Code Playgroud)
这是我尝试运行时获得的回溯script.py
:
File "script.py", line 1, in <module>
from subdir import *
AttributeError: 'module' object has …
Run Code Online (Sandbox Code Playgroud) 这是我正在使用的XML代码:
<inventory>
<drink>
<lemonade supplier="mother" id="1">
<price>$2.50</price>
<amount>20</amount>
</lemonade>
<lemonade supplier="mike" id="4">
<price>$3.00</price>
<amount>20</amount>
</lemonade>
<pop supplier="store" id="2">
<price>$1.50</price>
<amount>10</amount>
</pop>
</drink>
</inventory>
Run Code Online (Sandbox Code Playgroud)
然后我写了一个简单的代码来练习使用XPath:
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('sample.xml');
$xpathvar = new Domxpath($xmldoc);
$queryResult = $xpathvar->query('//lemonade/price');
foreach($queryResult as $result) {
echo $result->textContent;
}
?>
Run Code Online (Sandbox Code Playgroud)
该代码运行良好,按预期输出所有柠檬水价格值.现在,当我更改查询字符串以仅选择属性设置为某个值的元素时,例如
//柠檬水[供应商= "母亲"] /价格
要么
//柠檬水[ID = "1"] /价格
它不起作用,根本没有输出.我究竟做错了什么?
我一直在阅读有关css的一些教程,我看到了两种不同的方法来说明应该使用哪个css文件来设置页面样式:
<style type="text/css">@import url("style.css");</style>
Run Code Online (Sandbox Code Playgroud)
和
<link rel="stylesheet" type="text/css" href="style.css" />
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别?我应该使用哪一个?
我正在编写这个java程序,使用Sieve of Eratosthenes找到所有素数达到num,但是当我尝试编译时,它说我不能使用long var作为数组索引,并且它期望一个int var in它的位置.但我会使用大数字,所以我不能使用int.我能做什么?
import java.util.*;
import java.lang.*;
public class t3{
public static void main(String[] args){
long num = 100;
//declaring list and filling it with numbers
ArrayList<Long> numlist = new ArrayList<Long>();
for(long x=2 ; x<num ; x++){
numlist.add(new Long(x));
}
//sieve or eratosthenes
for(long x=0 ; x<Math.sqrt(num) ; x++){
for(long y=x+1 ; y<numlist.size() ; y++){
if(numlist[y]%numlist[x] == 0){
numlist.remove(y);
}
}
}
//print list
for(Object item : numlist){
System.out.println((Long)item);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图在冰箱磁铁示例中的一个可拖动小部件中发生双击时触发信号.这是我对示例源所做的更改:
DragLabel:
class DragLabel : public QLabel
{
public:
DragLabel(const QString &text, QWidget *parent);
QString labelText() const;
public slots:
void testSlot(){qDebug()<<"testSlot";} //<-- implemented this slot
protected:
void mouseDoubleClickEvent(QMouseEvent *ev){emit testSignal();} //<-- overriden this method
private:
QString m_labelText;
signals:
void testSignal(); //<-- added this signal
};
Run Code Online (Sandbox Code Playgroud)
我在实现文件中唯一改变的是添加connect(this,SIGNAL(testSignal()),this,SLOT(testSlot()));
到DragLabel的构造函数.
尝试编译项目导致' 未定义引用`DragLabel :: testSignal() '和' collect2:ld返回1退出状态 '错误.
当我注释掉对信号的调用时,它会编译并运行,但在应用程序输出中发出' Object :: connect:在draglabel.cpp中没有这样的信号QLabel :: testSignal() '警告.显然testSignal()不被识别为信号.
我试图将Q_OBJECT宏添加到DragLabel,但它导致4' 未定义引用'vtable for DragLabel' '警告和' collect2:ld返回1退出状态 '错误.
我错过了什么?
我写了一个小程序来测试访问widget父级的插槽.基本上,它有两个类:
小工具:
namespace Ui
{
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
QLabel *newlabel;
QString foo;
public slots:
void changeLabel();
private:
Ui::Widget *ui;
};
Widget::Widget(QWidget *parent)
: QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
customWidget *cwidget = new customWidget();
newlabel = new QLabel("text");
foo = "hello world";
this->ui->formLayout->addWidget(newlabel);
this->ui->formLayout->addWidget(cwidget);
connect(this->ui->pushButton,SIGNAL(clicked()),cwidget,SLOT(callParentSlot()));
connect(this->ui->pb,SIGNAL(clicked()),this,SLOT(changeLabel()));
}
void Widget::changeLabel(){
newlabel->setText(this->foo);
}
Run Code Online (Sandbox Code Playgroud)
和customWidget:
class customWidget : public QWidget
{
Q_OBJECT
public:
customWidget();
QPushButton *customPB;
public slots:
void callParentSlot();
}; …
Run Code Online (Sandbox Code Playgroud) 假设我有一个QPushButton小部件,它通过clicked()信号连接到一个插槽.第一个插槽依次通过emit关键字调用另一个插槽.第二个插槽从第一个插槽中获取参数并对其执行某些操作.它起作用了,但根据我对信号槽图案的理解,发出信号才有意义.发射插槽而不是信号是错误的吗?
我试图在运行时将项附加到QList,但我正在运行错误消息.基本上我要做的是创建一个QLists的QList,并为每个内部列表添加一些customClass对象.这是我的代码:
widget.h:
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
public slots:
static QList<QList<customClass> > testlist(){
QList<QList<customClass> > mylist;
for(int w=0 ; w<5 ; w++){
mylist.append(QList<customClass>());
}
for(int z=0 ; z<mylist.size() ; z++){
for(int x=0 ; x<10 ; x++){
customClass co = customClass();
mylist.at(z).append(co);
}
}
return mylist;
}
};
Run Code Online (Sandbox Code Playgroud)
customclass.h:
class customClass
{
public:
customClass(){
this->varInt = 1;
this->varQString = "hello world";
}
int varInt;
QString varQString;
};
Run Code Online (Sandbox Code Playgroud)
main.cpp中:
int main(int argc, char *argv[]) …
Run Code Online (Sandbox Code Playgroud)