共享一个共同父类的一组类的初始化过程可以分为三个部分:
目前,前两个部分是从__init__每个子类的方法调用的,但最后的初始化后部分必须单独调用,例如
class BaseClass:
def __init__(self):
print 'base __init__'
self.common1()
def common1(self):
print 'common 1'
def finalizeInitialization(self):
print 'finalizeInitialization [common2]'
class Subclass1(BaseClass):
def __init__(self):
BaseClass.__init__(self)
self.specific()
def specific(self):
print 'specific'
if __name__ == '__main__':
s = Subclass1() # Don't forget to finalize the initialization
s.finalizeInitialization() # now the object is fully initialized
Run Code Online (Sandbox Code Playgroud)
有没有办法不必调用finalizeInitialization()?或者可以将调用传递给finalizeInitialization()到Subclass1 finalizeInitialization()(如S.Lott的答案).这使得生活更轻松,但仍然需要记住完成初始化,这次是在"构造函数"中.无论哪种方式都没有办法强制执行完全初始化,这正是我正在寻找的.
对不起,如果这是一个菜鸟问题:(.
一块C代码.
int array[5];
int cnt;
for(cnt = 0; cnt <= 10; cnt+=1)
{
array[cnt] = cnt;
}
Run Code Online (Sandbox Code Playgroud)
应该给出错误吧?没有!工作良好!但那是为什么呢?似乎 - 在第一行 - 定义了超过双倍大小(11)的数组.您甚至可以稍后访问数组[5到10].这让我很困惑.定义数组[4或更少]时它停止工作...
提前致谢.
我把它扔出去只是好奇心的问题......
假设你只是期望/想要提供一种方法,这是不赞成还是不好的做法?
public class Something {
public Action OnRemove = () => { };
public Action<object, EventArgs> OnFinishedLoading = (sender, e) => { };
}
// then used like...
something.OnRemove = () => { /*do something...*/ };
something.OnFinishedLoading = (sender, e) => { /*do something else...*/ };
Run Code Online (Sandbox Code Playgroud)
我意识到这就像在事件中作弊一样,但我对这种方法有什么不好的意思吗?从长远来看,这是否会导致您的应用程序出现任何潜在问题?
我意识到如果你想要运行多种方法,那么事件会更好,这主要是一个问题,即你是否只想要/期望一种方法.
我们将C#和Linq2SQL与MS SQL Server数据库一起使用.我们有一个mockdatacontext来进行一些单元测试.在测试时,我们发现了两种不同的行为,具体取决于是使用"真实"还是"模拟"数据库.
场景1:真实数据库
数据库中有5条记录:
db = realDatabase
db.InsertOnSubmit(new record)
var count1 = db.getTable.Count()
db.SubmitChanges()
var count2 = db.getTable.Count()
Run Code Online (Sandbox Code Playgroud)
count1 = 5 count2 = 6
场景2:模拟数据库
数据库中有5条记录:
db= mockDatabase
db.InsertOnSubmit(new record)
var count1 = db.getTable.Count()
db.SubmitChanges()
var count2 = db.getTable.Count()
Run Code Online (Sandbox Code Playgroud)
count1 = 6 count2 = 6
*"模拟"数据库在调用SubmitChanges()之前已经知道新记录,因此它包含在计数中.为了测试,我们需要两个行为相同.
有没有其他人遇到这个问题,你能建议一个解决方案吗?
好.所以我有一些代码将winForm上的某些控件映射到对象中的某些属性,以便在数据发生某些事情时对控件执行某些操作.一切都很好,工作得很好.不是问题.问题是,要将项添加到映射中,我调用的函数看起来像:
this.AddMapping(this.myControl,myObject,"myObjectPropertyName");
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,在编译时很难说出上述行与下面的行之间的区别:
this.AddMapping(this.myControl,myObject,"myObjectPropretyName");
Run Code Online (Sandbox Code Playgroud)
由于最后一个参数是一个字符串,因此没有编译时检查或类似的任何东西会强制字符串本身实际上对应于给定对象上的有效属性名称.此外,Refactor和"查找所有引用"之类的内容错过了这种引用,当属性名称发生变化时会导致欢闹.所以我想知道的是,是否有某种方法可以更改函数,以便我传入的内容仍然是以某种方式表示属性名称的字符串,但是使用编译时检查实际值是否进入.有人说我可以用Expression Trees做到这一点,但我已经阅读了它们,似乎没有看到连接.我喜欢做类似的事情:
this.AddMapping(this.myControl,myObject,myObject.myObjectPropertyName);
Run Code Online (Sandbox Code Playgroud)
甚至
this.AddMapping(this.myControl,myObject.myObjectPropertyName);
Run Code Online (Sandbox Code Playgroud)
会很甜蜜!
有任何想法吗?
对于我正在实现的多文件上传器,我需要在使用匿名访问的Windows身份验证站点中拥有一个处理程序.
至于详细的在这里,这是因为Flash无法使用Windows身份验证.上述帖子指出,实现此目标的唯一方法是创建一个完全独立的站点.然而,对于上传者而言,这似乎是一个很大的麻烦.
有没有办法解决IIS的这种限制?
我在带有Service Pack 2的Windows 2003 Server上使用asp.net 3.0和IIS6.
我想在rails中做一个部分SSL站点.我基本上想要保护SSL背后的用户操作,但没有别的.
任何人都知道插件或宝石,使这简单而有效?
当我跑:
perl -e '$x="abc\nxyz\n123"; $x =~ s/\n.*/... multiline.../; printf("str %s\n", $x);'
Run Code Online (Sandbox Code Playgroud)
我希望结果如下:
str abc... multiline...
Run Code Online (Sandbox Code Playgroud)
相反,我得到了
str abc... multiline...
123
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
在Linux上,ulimit -n可用于更改或查看进程的文件描述符数量限制,并且lsof -p nnn | wc -l似乎始终报告实际的文件描述符用法.
但是在Mac OS X上,lsof -p nnn | wc -l可以返回高于限制的数字.我想这意味着lsof返回的不仅仅是文件描述符,但我不知道是什么.
结论:如何在Mac OS X中准确计算文件描述符的使用情况?
任何人都可以指出Python运行时占用空间与Java的严重比较吗?
谢谢,Avraham