标签: subclassing

在C++中,覆盖现有的虚函数会破坏ABI吗?

我的库有两个类,一个基类和一个派生类.在库的当前版本中,基类具有虚函数foo(),派生类不会覆盖它.在下一个版本中,我希望派生类可以覆盖它.这会破坏ABI吗?我知道引入一个新的虚函数通常会,但这似乎是一个特例.我的直觉是它应该改变vtbl中的偏移量,而不是实际改变表的大小.

显然,由于C++标准没有强制要求特定的ABI,这个问题在某种程度上是特定于平台的,但实际上,在大多数编译器中,断开和维护ABI是类似的.我对GCC的行为感兴趣,但是人们可以回答的编译器越多,这个问题就越有用;)

c++ virtual-functions backwards-compatibility abi subclassing

11
推荐指数
2
解决办法
1280
查看次数

覆盖objective-c中的可变方法

在objective-c中进行子类化时,如何在可变方法的情况下将调用转发给超类.我该怎么替换??? 下面发送我得到的所有对象?

- (void) appendObjects:(id) firstObject, ...
{
   [super appendObjects: ???];
}
Run Code Online (Sandbox Code Playgroud)

objective-c variadic-functions subclassing

10
推荐指数
1
解决办法
1642
查看次数

UIViewController的子类所需的初始值设定项

我一直在尝试遵循有关创建容器视图控制器的教程.它在Objective-C中.我想将它转换为Swift.我在这里找到了一些相同的问题,但我没有从中得到太多.

这是代码.

import UIKit

class ContainerViewController: UIViewController { // Class "ContainerViewController" has no initializers - That I know why.

    // 'required' initializer 'init(coder:)' must be provided by a subclass of UIViewController

    var currentDetailViewController: UIViewController

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过做两个错误所说的,但仍然无效.

uiviewcontroller subclassing ios swift

10
推荐指数
1
解决办法
6576
查看次数

如何更改子类python中的父属性

我有以下课程

class Foo():
    data = "abc"
Run Code Online (Sandbox Code Playgroud)

我把它子类化了

class Bar(Foo):
    data +="def"
Run Code Online (Sandbox Code Playgroud)

我正在尝试编辑子类中的父类属性.我希望我的父类有一些字符串,我的子类应该为该字符串添加一些额外的数据.如何在Python中完成?我设计错了吗?

python oop namespaces subclassing

10
推荐指数
2
解决办法
8672
查看次数

Python装饰器和类继承

我正在尝试使用装饰器来管理用户可能访问或不访问Web应用程序(在Google App Engine上运行)中的资源的方式.请注意,我不允许用户使用其Google帐户登录,因此无法在app.yaml中设置特定路径的特定访问权限.

我使用了以下资源:
- Bruce Eckel的装饰器指南
- SO:get-class-in-python-decorator2
- SO:python-decorators-and-inheritance
- SO:get-class-in-python-decorator

不过我还是有点困惑......

这是我的代码!在以下示例中,current_user是属于RequestHandler类的@property方法.它返回存储在数据存储区中的User(db.model)对象,其级别为IntProperty().

class FoobarController(RequestHandler):

    # Access decorator
    def requiredLevel(required_level):
        def wrap(func):
            def f(self, *args):
                if self.current_user.level >= required_level:
                    func(self, *args)
                else:
                    raise Exception('Insufficient level to access this resource') 
            return f
        return wrap

    @requiredLevel(100)
    def get(self, someparameters):
        #do stuff here...

    @requiredLevel(200)
    def post(self):
        #do something else here...
Run Code Online (Sandbox Code Playgroud)

但是,我的应用程序对不同类型的资源使用不同的控制器.为了在所有子类中使用@requiredLevel装饰器,我需要将它移动到父类(RequestHandler):

class RequestHandler(webapp.RequestHandler):

    #Access decorator
    def requiredLevel(required_level):
        #See code above
Run Code Online (Sandbox Code Playgroud)

我的想法是使用以下代码访问所有控制器子类中的装饰器:

class FoobarController(RequestHandler):

    @RequestHandler.requiredLevel(100)
    def get(self):
        #do stuff here...
Run Code Online (Sandbox Code Playgroud)

我想我刚刚达到了关于装饰器和类继承的知识限制:).有什么想法吗 ?

python web-applications decorator subclassing

9
推荐指数
1
解决办法
5427
查看次数

子类化用户模型在Rails中真的很糟糕吗?

我从Rails得到了很多回击,因为我将User子类化为许多不同的子类.在我的应用程序中,并非所有用户都是平等的 实际上有很多模型对象,并不是每个用户类型都可以访问它们.

我还需要一种方法来做多态行为.例如,许多方法的行为会有所不同,具体取决于类型.这不是多态性的意思吗?

但事实是,我总是从Rails回来.默认值 - 特别是表单提交给参数哈希的方式 - 似乎像非子类模型一样工作.链接和参数哈希只是默认设置真正咬你的两种方式.

在Rails中为不同类型的用户处理复杂逻辑的"正确"方法是什么?在Java中,子类化模型可以工作 - 您不必通过箍来使其按照您希望的方式工作.但是在Rails中,很难让子类使用REST约定,它会在你忘记包含:as => :user时惩罚你,或者当你在链接中放入子类对象时惩罚你,例如edit_user_path(@user)< - 坏主意!

还有一个区域也很难处理.假设我有一个Company模型,它有很多Users.这些用户可以是导演,教师,学员等 - 所有不同的子类.

当我们创建帐户时,我们可能想要使用accepts_nested_attributes_for :users.但是,如果我们使用它,我们不能指定它创建的类.血淋淋的地狱!

似乎Rails中的所有内容都不希望您将模型子类化.如果你没有子类,一切都"正常".但如果你是子类,那你就是为了地狱.

解决办法是什么?

ruby model ruby-on-rails subclassing

9
推荐指数
1
解决办法
3194
查看次数

在NSTextView中替换NSTextStorage的正确方法?

我正在制作一些文本查看器应用程序 目前我需要非常频繁和精确的线路处理能力,所以我想要继承NSTextStorage类.但我找不到任何方法来设置新的文本存储NSTextView.我能找到的唯一方法是

-[NSLayoutManager replaceTextStorage:]
Run Code Online (Sandbox Code Playgroud)

方法.但令人困惑的是,这是我正在寻找的.因为它似乎只是替换链接的NSLayoutManagers而不是NSTextView的文本存储.

我还考虑了子类化NSTextView和重写-textStorage方法,但如果该类不是为子类设计的,那么它将产生未定义的结果.

有人试图在NSTextView上使用自定义NSTextStorage吗?我怎样才能做到这一点?或者这是否被设计禁止?

cocoa nstextview subclassing nstextstorage

9
推荐指数
1
解决办法
3145
查看次数

如何在应用程序中覆盖内部框架方法(外部框架)

无论如何在Swift中进行子类化时重写内部框架方法?防爆.超

public class BarChartRenderer: ChartDataRendererBase {
   internal func drawDataSet(context context: CGContext, dataSet: BarChartDataSet, index: Int) {
             ...
   }
}
Run Code Online (Sandbox Code Playgroud)

我想覆盖此方法以不同的方式绘制dataSet(iOS-Charts)

public class ESBarChartRenderer: BarChartRenderer {
   overide func drawDataSet(context context: CGContext, dataSet: BarChartDataSet, index: Int) {
             ...
   }
}
Run Code Online (Sandbox Code Playgroud)

但是当我试图覆盖Xcode时给了我错误:

方法不会覆盖其超类中的任何方法

因为它是内部的.

还有一个内部变量,我需要访问和上面相同Xcode无法看到它.

overriding internal subclassing swift ios-charts

9
推荐指数
1
解决办法
785
查看次数

Dart / Flutter 子类化以使用可选参数

我试图弄清楚如何在不指定父类的所有可选参数的情况下创建类的子类,但仍然可以从子类的构造函数访问它们。在继承具有无数属性的 Flutter 小部件时,这一点尤其重要。

例如,DoorWidget 是具有许多可选参数的父类。

ChildDoorWidget 继承了 DoorWidget 来增加额外的逻辑,但仍然想要所有可选的父参数,而不必在子类的 super() 方法中指定每个参数。

有没有办法做到这一点?

这是一个例子。

    // Maine widget
    class DoorWidget {
      String color = 'red';
      int width;
      int height;
      int p1;
      int p2;
      int p3;
      Function onKicked = () => print('Kicked');

      DoorWidget(this.color, {this.onKicked, this.width, this.height, this.p1, this.p2, this.p3});
    }

    class ChildDoorWidget extends DoorWidget {
      @override
      String color = 'green';
      ChildDoorWidget(String color, {Function onKicked, int width, int height})
          // Do I need to specify every parent optional parameter in the super class?
          // …
Run Code Online (Sandbox Code Playgroud)

class subclassing dart flutter

9
推荐指数
1
解决办法
975
查看次数

通过继承`io.TextIOWrapper`对子文件进行子类化 - 但它的构造函数有哪些签名?

我试图子类io.TextIOWrapper下面这篇文章,虽然我的目标是不同的.从这开始(NB:动机):

class MyTextIOFile(io.TextIOWrapper):
    def read(self, *args):
        cont = super().read(*args)
        return cont.replace("\x00", "")
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用我的构造函数打开文件

In [81]: f = MyTextIOFile("file.csv")
Run Code Online (Sandbox Code Playgroud)

但这给了:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-90-343e18b2e32f> in <module>()
----> 1 f = MyTextIOFile("file.csv")

AttributeError: 'str' object has no attribute 'readable'
Run Code Online (Sandbox Code Playgroud)

事实上,似乎io.TextIOWrapper构造函数希望传递一个文件对象.通过反复试验,我发现这个文件对象需要以二进制模式打开.但是我无法在任何地方找到文档,而且我不想构建在无证件行为之上(实际上,尝试继续使用它已经导致我在尝试传递对象时遇到问题csv.reader).在Python 3中对文件对象进行子类化的正确和受支持的方法是什么?

我正在使用Python 3.5.0.

python io subclassing python-3.x

8
推荐指数
1
解决办法
606
查看次数