考虑一下——基类a,类B继承自a,类C继承自B,在初始化器中调用父类初始化器的通用方法是什么?如果这听起来仍然太模糊,这里有一些代码。

class A(object):
    def __init__(self):
        print "Initialiser A was called"

class B(A):
    def __init__(self):
        super(B,self).__init__()
        print "Initialiser B was called"

class C(B):
    def __init__(self):
        super(C,self).__init__()
        print "Initialiser C was called"

c = C()

我现在就是这么做的。但它似乎还是有点太非泛型了——您仍然必须手动传递正确的类型。

现在,我尝试使用self。__class__作为super()的第一个参数,但是,显然它不起作用-如果你把它放在C的初始化式中-很好,B的初始化式会被调用。如果你在B中做同样的事情,“self”仍然指向C的一个实例,所以你最终再次调用B的初始化式(这以无限递归结束)。

目前没有必要考虑钻石继承的问题,我只是对解决这个具体问题感兴趣。

为什么这个代码:

class A
{
    public: 
        explicit A(int x) {}
};

class B: public A
{
};

int main(void)
{
    B *b = new B(5);
    delete b;
}

导致以下错误:

main.cpp: In function ‘int main()’:
main.cpp:13: error: no matching function for call to ‘B::B(int)’
main.cpp:8: note: candidates are: B::B()
main.cpp:8: note:                 B::B(const B&)

B不应该继承A的构造函数吗?

(这是使用gcc)

我需要从下拉菜单中选择一个元素。

例如:

<select id="fruits01" class="select" name="fruits">
  <option value="0">Choose your fruits:</option>
  <option value="1">Banana</option>
  <option value="2">Mango</option>
</select>

1)首先我得点击它。我是这样做的:

inputElementFruits = driver.find_element_by_xpath("//select[id='fruits']").click()

2)之后,我必须选择好的元素,让我们说芒果。

我尝试用inputElementFruits.send_keys(…)来做,但它不起作用。

我正在考虑如何在SQL Server数据库中表示一个复杂的结构。

考虑这样一个应用程序,它需要存储一系列对象的详细信息,这些对象共享一些属性,但有许多其他不常见的属性。例如,一个商业保险包可能在同一份保单记录中包括责任、汽车、财产和赔偿。

在c#等语言中实现这一点很简单,因为您可以创建一个带有Sections集合的Policy,其中Section根据需要继承各种类型的封面。然而,关系数据库似乎不容易做到这一点。

我可以看到有两个主要的选择:

创建一个Policy表,然后创建一个Sections表,其中包含所有可能的变量所需的所有字段,其中大多数字段将为空。 创建一个Policy表和许多Section表,每个表对应一种封面。

这两种选择似乎都不能令人满意,特别是需要跨所有section编写查询,这将涉及大量连接或大量空检查。

这个场景的最佳实践是什么?

在MDN文章《面向对象Javascript介绍》中关于继承的部分,我注意到他们设置了prototype.constructor:

// correct the constructor pointer because it points to Person
Student.prototype.constructor = Student;  

这有什么重要的目的吗?可以省略吗?

我试图用一个URL启动chrome浏览器,浏览器启动后,它什么也不做。

1分钟后我看到如下错误:

Unable to open browser with url: 'https://www.google.com' (Root cause: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
  (Driver info: chromedriver=2.39.562718 (9a2698cba08cf5a471a29d30c8b3e12becabb0e9),platform=Windows NT 10.0.15063 x86_64) (WARNING: The server did not provide any stacktrace information)

我的配置:

Chrome浏览器:66 ChromeBrowser: 2.39.56

又及,在Firefox中一切都很好

在工作中,我的任务是将一堆HTML文件转换成一个简单的JSP项目。它完全是静态的,没有服务器端逻辑来编程。我应该提一下,我对Java完全不熟悉。JSP文件似乎可以很容易地使用常见的include和变量,就像PHP一样,但我想知道一个简单的方法来获得像模板继承(Django风格)这样的东西,或者至少能够有一个包含页眉和页脚的base.jsp文件,这样我就可以稍后插入内容。

Ben Lings似乎在他的回答中提供了一些希望: JSP模板继承 有人能解释一下如何做到这一点吗?

鉴于我没有太多时间,我认为动态路由有点多,所以我很乐意让url直接映射到.jsp文件,但我愿意听取建议。

谢谢。

编辑:我不想使用任何外部库,因为这将增加我自己和其他参与项目的人的学习曲线,而我工作的公司已经签订了这样做的合同。

另一个编辑:我不确定JSP标记是否有用,因为我的内容实际上没有任何模板变量。我需要的是一种能够做到这一点的方法:

base.html:

<html><body>
{ content.body }
</body></html>

somepage.html

<wrapper:base.html>
<h1>Welcome</h1>
</wrapper>

输出为:

<html><body>
<h1>Welcome</h1>
</body></html>

我想这会给我足够多的功能去做我需要的一切。它可以通过包含来实现,但然后我需要为每个包装器设置一个顶部和底部包含,这有点混乱。

在Java中匿名类有什么用?我们可以说使用匿名类是Java的优点之一吗?

假设我有一个多重继承的场景:

class A(object):
    # code for A here

class B(object):
    # code for B here

class C(A, B):
    def __init__(self):
        # What's the right code to write here to ensure 
        # A.__init__ and B.__init__ get called?

有两种典型的方法来编写C语言的__init__:

(老式)ParentClass.__init__(自我) (new -style) super(DerivedClass, self).__init__()

然而,在任何一种情况下,如果父类(A和B)不遵循相同的约定,那么代码将不能正确工作(有些可能会丢失,或被多次调用)。

正确的方法是什么来着?说“保持一致,遵循其中一个”很容易,但如果A或B来自第三方库,那怎么办?是否有一种方法可以确保所有父类构造函数都被调用(并且以正确的顺序,并且只调用一次)?

编辑:看看我的意思,如果我这样做:

class A(object):
    def __init__(self):
        print("Entering A")
        super(A, self).__init__()
        print("Leaving A")

class B(object):
    def __init__(self):
        print("Entering B")
        super(B, self).__init__()
        print("Leaving B")

class C(A, B):
    def __init__(self):
        print("Entering C")
        A.__init__(self)
        B.__init__(self)
        print("Leaving C")

然后我得到:

Entering C
Entering A
Entering B
Leaving B
Leaving A
Entering B
Leaving B
Leaving C

注意B的init被调用了两次。如果我这样做:

class A(object):
    def __init__(self):
        print("Entering A")
        print("Leaving A")

class B(object):
    def __init__(self):
        print("Entering B")
        super(B, self).__init__()
        print("Leaving B")

class C(A, B):
    def __init__(self):
        print("Entering C")
        super(C, self).__init__()
        print("Leaving C")

然后我得到:

Entering C
Entering A
Leaving A
Leaving C

注意B的init从未被调用。因此,似乎除非我知道/控制从(A和B)继承的类的初始化,否则我无法为我正在编写的类(C)做出安全的选择。