据我了解,Python(2.5.2)并没有真正支持抽象类.为什么pylint抱怨这个类是"抽象类而不是引用?" 它会为任何NotImplementedError抛出的类做到这一点吗?
我在每个类都有自己的文件,所以如果是这种情况,我想我别无选择,只能压制这个消息,但我希望可能有另一种方法.
"""Package Repository interface."""
class PackageRepository(object):
"""Package Repository interface."""
def __init__(self):
self.hello = "world"
def get_package(self, package_id):
"""
Get a package by ID.
"""
raise NotImplementedError( \
"get_package() method has not been implemented")
def get_packages(self):
"""
Get all packages.
"""
raise NotImplementedError( \
"get_packages() method has not been implemented")
def commit(self):
"""
Commit all changes.
"""
raise NotImplementedError( \
"commit() method has not been implemented")
def do_something(self):
"""
Doing something.
"""
return self.hello
Run Code Online (Sandbox Code Playgroud)
编辑
也许我应该澄清一下.我意识到这是一个抽象类,我很乐意使用抽象关键字,但据我所知,它在Python中并不重要(至少在我目前使用的版本中)所以我没有做任何有趣的抽象技巧(像那里发现的 …
我正在寻找一些工具或代码示例来帮助我构建一些外观和行为有点像有线节目指南.一般的想法是,这将是一个管理UI,用于在各个渠道上安排资产.预定资产不能在任何给定频道上重叠.
我发现至少有一个体面的调度程序(dhtmlxScheduler),但我担心它不够灵活,我不能根据自己的喜好进行调整.所以我想我可能需要一个更通用的解决方案,我可以向我需要它移动的方向弯曲.
我不愿意诉诸Flex,但这可能是我最好的选择.欢迎任何建议.
我希望能够在尝试调用之前测试回调是否有效.这可能吗?
如果我打电话call_user_func或call_user_func_array用array($this, 'methodThatDoesNotExist')PHP之类的东西警告[E_WARNING] call_user_func() expects parameter 1 to be a valid callback.
我最近开始在Java工作,并被介绍到疯狂和疯狂的吸气剂和安装者的世界.我起初讨厌它,但很快就习惯了.太习惯了.
我最近花了很多时间思考课堂设计.我要做的其中一件事就是避免为所有事情做吸气剂和制定者的陷阱.但是,我所做的大部分工作都是使用主要是数据容器的实体,而我不确定在这些情况下,getter和setter实际上是不合适的.
这是一个使用公共属性的简单示例.
class Space {
public String name;
public String description;
Space(final String name, final String description) {
this.name = name;
this.description = description;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个使用私有属性并使用getter和setter的简单示例.
class Space {
private String name;
private String description;
Space(final String name, final String description) {
this.name = name;
this.description = description;
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
public String getDescription() {
return this.description;
}
public void setDescription(final String description) …Run Code Online (Sandbox Code Playgroud) 我使用getopt_long来处理C++应用程序中的命令行参数.这些示例都显示printf("Username: %s\n", optarg)了处理示例中的内容.这非常适合展示一个示例,但我希望能够实际存储这些值以供以后使用.其余大部分代码都使用string对象而不是char*我需要将optarg的内容转换/复制到字符串中.
string bar;
while(1) {
c = getopt_long (argc, argv, "s:U:", long_options, &option_index);
if (c == -1) break;
switch(c)
{
case 'U':
// What do I need to do here to get
// the value of optarg into the string
// object bar?
bar.assign(optarg);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码编译,但是当它执行时我得到一个Illegal instruction错误,如果我尝试使用printf打印出bar的值(它似乎对cout工作正常).
// Runs just fine, although I'm not certain it is actually safe!
cout << " bar: " << bar << "\n"; …Run Code Online (Sandbox Code Playgroud) 在一个项目中,我有两个noinst_PROGRAM定义.其中一个工作正常,但另一个给我以下消息:
/home/altern8/workspaces/4355/libgdata/test/.libs/lt-gdatacalendar:符号查找错误:/home/altern8/workspaces/4355/libgdata/test/.libs/lt-gdatacalendar:undefined symbol:_ZN5gdata7service7ServiceD1Ev
我一直在浏览我的Makefile.am文件,我找不到任何我错过的东西.应用程序正确编译所以我猜这意味着头文件被正确找到但由于某种原因我gdata::service::Service没有被包含在src/libgdata.la库中.
我的假设可能是正确的吗?src/libgdata.la库中定义的其他类似乎可用."make"的输出显示正在正确编译Service.cc文件...我应该查看哪些指针以确定它是否包含在最终库中?
编辑:
我已经能够根据目前为止提供的答案进一步调试这一点.
析构函数在Service.cc中定义.如果我在析构文件中给析构函数一个正文,那么一切正常.
// In Service.h
~Service() {}
// In Service.cc
// Service::~Service() {}
Run Code Online (Sandbox Code Playgroud)
既然析构函数"有效",我会遇到Service.cc中定义的其他未找到的方法.
使用@ ephemient的方法,它看起来像这些符号实际上被包含在库中.或者我输错了输出?
000000e0 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_
000000a0 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_b
./src/.libs/libgdata.a
000240d0 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_
00024090 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_b
000240d0 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_
00024090 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_b
./src/.libs/libgdata.so
00000080 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_
00000070 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_b
./src//gdata/service/libgdata__gdata_service_la-Service.o
000000e0 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_
000000a0 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_b
./src//gdata/service/.libs/libgdata__gdata_service.a
000000e0 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_
000000a0 T _ZN55gdata7service7Service22addCommonRequestHeaderERKSsS4_b
./src//gdata/service/.libs/libgdata__gdata_service_la-Service.o
Run Code Online (Sandbox Code Playgroud)
我的src/Makefile.am看起来像这样:
SUBDIRS = gdata
lib_LTLIBRARIES = libgdata.la
libgdata_la_SOURCES =
libgdata_la_LIBADD = \
gdata/client/libgdata_gdata_client.la …Run Code Online (Sandbox Code Playgroud) 我写了一个依赖于libxml ++和curl的库,我很难AC_CHECK_LIB在我编写的另一个包中找到如何使用我的库.该config.log文件为新的包裹表示有未定义的引用curl_*和xmlpp::*.
我已经PKG_CHECK_MODULES在我的最新软件包中设置了libxml ++和curl,这些工作,但它们显然不适AC_CHECK_LIB用于我自己的库的调用.(在检查我自己的库之前,我检查了libxml ++和curl)