Questions tagged «inheritance»

继承是面向对象编程中的系统,该系统允许对象支持由先前类型定义的操作,而不必提供自己的定义。它是面向对象编程中多态性的主要载体。

5
如何“完美”地覆盖字典?
如何使dict的子类尽可能“完美” ?最终目标是要有一个简单的字典,其中的键是小写的。 似乎应该覆盖一些微小的原语才能完成这项工作,但是根据我的所有研究和尝试,似乎并非如此: 如果我覆盖__getitem__/__setitem__,则get/ set不起作用。如何使它们工作?当然,我不需要单独实施它们吗? 我是否在阻止酸洗,我需要实施__setstate__等吗? 我是否需要repr,update以及__init__? 我应该只使用mutablemapping(似乎不应该使用UserDict or DictMixin)吗?如果是这样,怎么办?这些文档并不完全具有启发性。 这是我的第一个尝试,get()不起作用,毫无疑问,还有许多其他小问题: class arbitrary_dict(dict): """A dictionary that applies an arbitrary key-altering function before accessing the keys.""" def __keytransform__(self, key): return key # Overridden methods. List from # /programming/2390827/how-to-properly-subclass-dict def __init__(self, *args, **kwargs): self.update(*args, **kwargs) # Note: I'm using dict directly, since …


3
基于原型与基于类的继承
在JavaScript中,每个对象同时是一个实例和一个类。要进行继承,可以将任何对象实例用作原型。 在Python,C ++等中。有类和实例作为单独的概念。为了进行继承,您必须使用基类创建一个新类,然后该新类可用于生成派生实例。 为什么JavaScript朝这个方向发展(基于原型的面向对象)?与传统的基于类的OO相比,基于原型的OO有哪些优点和缺点?

3
为什么我必须通过this指针访问模板基类成员?
如果下面的类不是模板,那么我可以简单地x在derived该类中使用。但是,在下面的代码中,我必须使用this->x。为什么? template <typename T> class base { protected: int x; }; template <typename T> class derived : public base<T> { public: int f() { return this->x; } }; int main() { derived<int> d; d.f(); return 0; }

10
AngularJS控制器可以从同一模块中的另一个控制器继承吗?
在模块内,控制器可以从外部控制器继承属性: var app = angular.module('angularjs-starter', []); var ParentCtrl = function ($scope, $location) { }; app.controller('ChildCtrl', function($scope, $injector) { $injector.invoke(ParentCtrl, this, {$scope: $scope}); }); 通过以下示例进行操作:无效链接:http : //blog.omkarpatil.com/2013/02/controller-inheritance-in-angularjs.html 模块内部的控制器也可以从同级继承吗? var app = angular.module('angularjs-starter', []); app.controller('ParentCtrl ', function($scope) { //I'm the sibling, but want to act as parent }); app.controller('ChildCtrl', function($scope, $injector) { …

14
新和替代之间的区别
想知道以下内容之间有什么区别: 情况1:基类 public void DoIt(); 情况1:继承的类 public new void DoIt(); 情况2:基类 public virtual void DoIt(); 情况2:继承的类 public override void DoIt(); 根据我运行的测试,案例1和案例2似乎具有相同的效果。有区别还是首选方式?

4
super()失败,并显示错误:当父级未从对象继承时,TypeError“参数1必须为类型,而不是classobj”
我收到一些我不知道的错误。任何线索我的示例代码有什么问题吗? class B: def meth(self, arg): print arg class C(B): def meth(self, arg): super(C, self).meth(arg) print C().meth(1) 我从“ super”内置方法的帮助下获得了示例测试代码。 这是错误: Traceback (most recent call last): File "./test.py", line 10, in ? print C().meth(1) File "./test.py", line 8, in meth super(C, self).meth(arg) TypeError: super() argument 1 must be type, not classobj …

13
您不应该继承std :: vector
好的,这确实很难让人承认,但是目前我确实有很强的诱惑力可以继承std::vector。 我需要大约10种针对矢量的自定义算法,并且希望它们直接成为矢量的成员。但是我自然也希望拥有的其余std::vector界面。好吧,作为守法公民,我的第一个想法是std::vectorMyVector班级成员。但是然后我将不得不手动重新提供所有std :: vector的接口。输入太多。接下来,我考虑了私有继承,因此我将using std::vector::member在公共部分写一堆,而不是提供方法。其实这也很乏味。 在这里,我确实确实认为我可以简单地从公开继承std::vector,但是在文档中提供警告,该类不应被多态使用。我认为大多数开发人员都有足够的能力来理解,无论如何都不应多态地使用它。 我的决定绝对不合理吗?如果是这样,为什么?您能否提供一种替代方法,使其他成员实际成为成员,而不涉及重新键入vector接口的所有内容?我对此表示怀疑,但如果可以的话,我会很高兴。 此外,除了一些白痴可以写类似的事实 std::vector<int>* p = new MyVector 使用MyVector 还有其他现实的危险吗?通过说现实,我舍弃了像想象一个需要指向矢量指针的函数之类的事情。 好吧,我已经说了我的案子。我犯罪了。现在由你来原谅我:)
189 c++  oop  inheritance  stl  vector 

9
Maven项目版本继承-我必须指定父版本吗?
我有两个项目:父项目:A,子项目:B A / pom.xml: <groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>0.1-SNAPSHOT</version> <packaging>pom</packaging> 在B / pom.xml中,我有: <parent> <groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>0.1-SNAPSHOT</version> </parent> <groupId>com.dummy.bla.sub</groupId> <artifactId>kid</artifactId> 我希望B继承父版本,因此我需要放在的唯一位置0.1-SNAPSHOT是A/pom.xml。但是,如果我<version>0.1-SNAPSHOT</version>从B/pom.xml父项下删除,则maven会抱怨父项缺少版本。 有没有一种我可以使用的方法${project.version}或类似的方法来避免01.-SNAPSHOT两种情况都出现?
188 inheritance  maven 

2
测试Ruby类是否是另一个类的子类
我想测试一个类是否从另一个类继承,但是似乎不存在用于该类的方法。 class A end class B < A end B.is_a? A => false B.superclass == A => true 我想要的一个简单实现是: class Class def is_subclass_of?(clazz) return true if superclass == clazz return false if self == Object superclass.is_subclass_of?(clazz) end end 但我希望这已经存在。



8
在Kotlin中扩展数据类
数据类似乎可以替代Java中的老式POJO。这些类将允许继承是非常可预期的,但是我看不到扩展数据类的便捷方法。我需要的是这样的: open data class Resource (var id: Long = 0, var location: String = "") data class Book (var isbn: String) : Resource() 上面的代码由于component1()方法冲突而失败。data仅将注释留在一个类中也不起作用。 也许还有另一个习惯来扩展数据类? UPD:我可能仅注释子子类,但data注释仅处理构造函数中声明的属性。也就是说,我必须声明所有父项的属性open并覆盖它们,这很丑陋: open class Resource (open var id: Long = 0, open var location: String = "") data class Book ( override var id: Long = …

6
用多重继承调用父类__init__,正确的方法是什么?
假设我有多个继承方案: 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__(self) (较新的样式) super(DerivedClass, self).__init__() 但是,在任何一种情况下,如果父类(A和B)没有遵循相同的约定,则代码将无法正常工作(某些代码可能会丢失或多次调用)。 那么又是什么正确的方法呢?说“保持一致,遵循一个或另一个”很容易,但是如果A或B来自第三方图书馆,那又如何呢?有没有一种方法可以确保所有父类构造函数都被调用(以正确的顺序,并且只能调用一次)? 编辑:看看我的意思,如果我这样做: class A(object): def __init__(self): print("Entering …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.