考虑以下课程
class A{
public void init(){
//do this first;
}
public void atEnd(){
//do this after init of base class ends
}
}
class B1 extends A{
@Override
public void init()
{
super.init();
//do new stuff.
//I do not want to call atEnd() method here...
}
}
Run Code Online (Sandbox Code Playgroud)
我有几个已经开发的B1,B2,... Bn子类.所有这些都扩展了A类.如果我想在所有这些中添加一个新功能,最好的方法是在A类的方法中定义它.但条件是该方法应始终在之前自动调用子类的init()方法结束.一种基本的方法是在子类的init()方法结束时再次添加atEnd()方法调用.但有没有其他方法可以做到这一点?
我已经使用openssl SHA256和私钥对文件进行了签名,如下所示:
with subprocess.Popen(
# Pipe the signature to openssl to convert it from raw binary encoding to base64 encoding.
# This will prevent any potential corruption due to line ending conversions, and also allows
# a human to read and copy the signature (e.g. for manual verification).
'openssl dgst -sha256 -sign private.key sign_me.zip | openssl base64 > signature.sha256',
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
shell=True,
) as proc:
out, _ = proc.communicate()
Run Code Online (Sandbox Code Playgroud)
signature.sha256并public_key.crt确认sign_me.zip尚未修改。背景
我有一个 Python 3.5 控制台程序通过 pyinstaller 编译成 Windows 可执行文件。
题
我如何检测这些不同的场景?
约束
我尝试过的事情
sys.stdin.isatty()
/sf/answers/267298601/
os.isatty(sys.stdout.fileno())
/sf/answers/427595311/
这些总是True在 Windows 上返回。
搜索 StackOverflow/互联网:
如何确定 Python 脚本是否通过命令行运行?
如何检查 Python 脚本是否以交互方式启动?
据我所知,如果用户启动了程序,无论它是从命令提示符还是 GUI 启动,它都会以交互方式运行。
我还考虑检查父进程是否为cmd.exe或explorer.exe。但是,通过 Windows 运行命令启动程序将使explorer.exe父进程。通过任务管理器启动程序将使任务管理器成为父进程。这些是我可以忍受的边缘情况,但显然我更喜欢更强大的解决方案。
我有一个调用的perl脚本fetch.pl和一个名为的模块My_Util.pm.
My_Util.pm
package My_Util;
sub get_header
{
my $msg = shift;
return " ===== $msg ===== ";
}
1; # Perl modules must return a true value when loaded.
Run Code Online (Sandbox Code Playgroud)
fetch.pl
use My_Util;
print_and_log(My_Util->get_header("foo"));
print_and_log("blah");
sub print_and_log
{
my $message = shift;
print("$message\n");
}
Run Code Online (Sandbox Code Playgroud)
预期产出:
===== foo =====
blah
Run Code Online (Sandbox Code Playgroud)
实际产量:
===== My_Util =====
blah
Run Code Online (Sandbox Code Playgroud)
编辑:修复了语法错误
项目: 我有一个父面板,其中包含一个ComboBox和FlowLayoutPanel。FlowLayoutPanel拥有可变数量的子面板(从UserControl继承的自定义控件)。每个子面板包含一些标签,两个ComboBox,一个按钮以及一个带有3个ComboBox列和一个按钮列的DataGridView。DataGridView可能有1-6行。从父面板的ComboBox中选择一个项目时,FlowLayoutPanel会填充子面板。

问题: 用大约50个子面板填充FlowLayoutPanel大约需要2.5秒。具体来说,我确定对FlowLayoutPanel.Controls.AddRange()的调用是罪魁祸首。
相关代码:我无法在此处发布所有代码(太多代码及其部分内容是机密的),但我会尽力解释正在发生的事情。
父面板:
private void displayInformation(Suite suite)
{
this.SuspendLayout();
// Get dependencies.
List<SuiteRange> dependents = new List<SuiteRange>(suite.dependencies.Keys);
dependents.Sort(SuiteRange.Compare);
// Create a ChildPanel for each dependent.
List<ChildPanel> rangePanels = new List<ChildPanel>();
foreach (SuiteRange dependent in dependents)
{
ChildPanel sdp = new ChildPanel();
sdp.initialize(initialSuite.name, dataAccess);
sdp.displayInformation(dependent, suite.dependencies[dependent]);
rangePanels.Add(sdp);
}
// Put the child panels in the FlowLayoutPanel.
flpDependencyGroups.SuspendLayout();
// Takes ~2.5 seconds
flpDependencyGroups.Controls.AddRange(rangePanels.ToArray());
flpDependencyGroups.ResumeLayout();
// Takes ~0.5 seconds
updateChildPanelSizes();
this.ResumeLayout();
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情:
python-3.x ×2
.net ×1
.net-2.0 ×1
c# ×1
cryptography ×1
inheritance ×1
java ×1
openssl ×1
perl ×1
pyinstaller ×1
python ×1
sha256 ×1
ssl ×1
windows ×1
winforms ×1