标签: subclassing

在Rails中对子模型进行子类化

我有两个模型,Article和Recipe,它们有一堆相同的属性和方法.我想创建一个新类"Post"的子类,并在那里移动所有共享逻辑,所以我不维护重复的代码.我试过这个:

class Recipe < Post; end
class Article < Post; end
class Post < ActiveRecord::Base
     #all the shared logic
end
Run Code Online (Sandbox Code Playgroud)

所有这些类都在标准的./app/models文件夹中.但是,当我转到/ articles/new时,此代码会抛出ActiveRecord :: StatementInvalid错误.错误是:

找不到表'帖子'

知道如何设置吗?

model ruby-on-rails subclassing

7
推荐指数
2
解决办法
5803
查看次数

Django:为基于类的视图扩展get_object

作为一个非专业的Python程序员,我正在寻找有关扩展Django的SingleObjectMixin类的get_object方法的方式的反馈.

对于我的大多数细节视图,使用pk或slugfield进行查找很好 - 但在某些情况下,我需要根据其他(唯一)字段检索对象,例如"username".我将Django的DetailView子类化,并修改了get_object方法,如下所示:

# extend the method of getting single objects, depending on model
def get_object(self, queryset=None):

    if self.model != mySpecialModel:
        # Call the superclass and do business as usual 
        obj = super(ObjectDetail, self).get_object()
        return obj

    else:
        # add specific field lookups for single objects, i.e. mySpecialModel
        if queryset is None:
            queryset = self.get_queryset()

        username = self.kwargs.get('username', None)
        if username is not None:
            queryset = queryset.filter(user__username=username)
        # If no username defined, it's an error.
        else:
            raise AttributeError(u"This generic detail …
Run Code Online (Sandbox Code Playgroud)

django subclassing django-generic-views

7
推荐指数
1
解决办法
6597
查看次数

Python内置类型子类化

这段代码出了什么问题?

class MyList(list):
  def __init__(self, li): self = li
Run Code Online (Sandbox Code Playgroud)

例如,当我创建一个MyListwith的实例,MyList([1, 2, 3])然后我打印这个实例时,我得到的只是一个空列表[].如果MyDict是子类list,不是MyDict一个list本身?

注意:在Python 2.x和3.x中都有.

python initialization built-in-types subclassing

7
推荐指数
1
解决办法
1652
查看次数

如何在编辑框中接收TAB键?

我想OnKeyPress在用户按下Tab键时接收事件.

procedure TForm1.Edit1(Sender: TObject; var Key: Char);
begin
   case Key of
   #09:
      begin
         //Snip - Stuff i want to do
      end;
   end;
end;
Run Code Online (Sandbox Code Playgroud)

我尝试子类化Edit框,并处理WM_GETDLGCODE消息:

procedure TfrmEnableVIPMode.AccountNumberWindowProc(var Message: TMessage);
begin
   case Message.Msg of
   WM_GETDLGCODE: Message.Result := DLGC_WANTTAB;
   else
      FOldAccountNumberWindowProc(Message);
   end;
end;
Run Code Online (Sandbox Code Playgroud)

我现在收到Tab KeyPress事件(正如我所希望的那样),但现在按下LeftRight光标键会使焦点转移到Tab键顺序中的上一个或下一个控件.

收到Tab键按键事件的正确方法是什么?

奖金阅读

我试着做MSDN文档所说的内容:

wParam
用户按下的虚拟键,提示Windows发出此通知.处理程序必须有选择地处理这些键.例如,处理程序可能接受并处理VK_RETURN,但将VK_TAB委托给所有者窗口.有关值列表,请参阅虚拟键代码.

lParam指向MSG结构的指针(如果系统正在执行查询,则为NULL).

wParamwParam均为零.

更新二

我意识到我和这个答案有同样的错误:

if Message.Msg …
Run Code Online (Sandbox Code Playgroud)

delphi accessibility delphi-5 subclassing

7
推荐指数
2
解决办法
3971
查看次数

来自numpy数组的派生类与矩阵和掩码数组不兼容

我试图将numpy ndarray子类化,但是我无法使用其他numpy类型(如masked array或matrix)进行操作.在我看来,__ array_priority__没有被尊重.作为一个例子,我创建了一个模拟重要方面的虚拟类:

import numpy as np

class C(np.ndarray):

    __array_priority__ = 15.0

    def __mul__(self, other):
        print("__mul__")
        return 42

    def __rmul__(self, other):
        print("__rmul__")
        return 42
Run Code Online (Sandbox Code Playgroud)

我的类和普通 ndarray 之间的操作按预期工作:

>>> c1 = C((3, 3))
>>> o1 = np.ones((3, 3))
>>> print(o1 * c1)
__mul__
42
>>> print(c1 * o1)
__rmul__
42 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用矩阵(或掩码数组)时,不尊重数组优先级.

>>> m = np.matrix((3, 3))
>>> print(c1 * m)
__mul__
42
>>> print(m * c1)
Traceback (most recent call last):
...
  File "/usr/lib64/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 330, in …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy matrix subclassing

7
推荐指数
1
解决办法
425
查看次数

无法使用Ebean在Play中创建基本模型类

我正在尝试使用Ebean在Play中创建以下类:

public class BaseModel extends Model {

    @Column(name = "created_at")
    public Date createdAt;

    @Column(name = "updated_at")
    public Date updatedAt;

    @PrePersist
    public void createdAt() {
        this.createdAt = this.updatedAt = new Date();
    }

    @PreUpdate
    public void updatedAt() {
        this.updatedAt = new Date();
    }

}
Run Code Online (Sandbox Code Playgroud)

它编译没问题,但是当我用我的实体bean子类化这个类时(所以每个都会插入时间戳进行创建和更新)我在尝试点击应用程序时遇到以下异常:

play.api.UnexpectedException: Unexpected exception[PersistenceException: Error with [models.InventoryItem] I believe it is not enhanced but it's superClass [class models.BaseModel] is? (You are not allowed to mix enhancement in a single inheritance hierarchy)]
        at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:150) ~[play_2.10.jar:2.1.4]
        at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:114) ~[play_2.10.jar:2.1.4]
        at …
Run Code Online (Sandbox Code Playgroud)

subclassing playframework ebean

7
推荐指数
1
解决办法
2723
查看次数

如何在swift中使用xib子类化自定义Cell类

我遇到了简单的问题,无法找到任何解决方案.

MyCell.xib有文件所有者MyCell : UITableViewCell类.

我这样用它:

viewDidLoad方法:

 let nib = UINib(nibName: "MyCell", bundle: nil)
 self.tableView.register(nib, forCellReuseIdentifier: "myIdentifier")
Run Code Online (Sandbox Code Playgroud)

tableView cellForRowAt方法:

 let cell = tableView.dequeueReusableCell(withIdentifier: "myIdentifier", for: indexPath) as? MyCell
Run Code Online (Sandbox Code Playgroud)

它运作良好.

我将我的类子类化为添加一些新方法:

 class SuperCell : MyCell {
      func coolMethod {
           print("cool")
      }
 }
Run Code Online (Sandbox Code Playgroud)

并尝试使用它:

let cell = tableView.dequeueReusableCell(withIdentifier: "myIdentifier", for: indexPath) as? SuperCell
Run Code Online (Sandbox Code Playgroud)

它返回 nil

我怎样才能使它工作?

我尝试在InterfaceBuilder中使用标识符myIdentifier和类创建原型单元格SuperCell,但它没有帮助.

我为什么需要它

我只想对不同的单元类使用相同的视图(xib).

在我的情况下,我有MyCell视图(xib)的公共cell().MyCell完全描述字段(IBOutlets).此外,我想创建一些子类的另一个单元类MyCell,但它们将提供这些IBOutlet的一些行为.例如,FirstMyCell : MyCell将有方法setFieldsFrom(objectOne: ObjectOne),SecondMyCell : MyCell …

uitableview subclassing tablecell ios swift

7
推荐指数
1
解决办法
1153
查看次数

子类化multiprocessing.managers.BaseProxy

我在尝试实现新的defaultdict代理对象时遇到了一些麻烦.该文档是有点恐慌,所以我不知道如何正确地去了解这一点.

我想defaultdictManager实例中添加一个类型列表.你不能Manager.register在股票上使用这个方法,multiprocessing.Manager所以我从中创建了自己的存根管理器multiprocessing.mangers.BaseManager

class Manager(BaseManager):
    pass
Run Code Online (Sandbox Code Playgroud)

然后我创建了我的子类multiprocessing.managers.BaseProxy来容纳defaultdict(我最初尝试使用另一个子类defaultdict,BaseProxy但是它似乎没有用.但这是我现在拥有的:

class ProxyDefaultDict(BaseProxy):
    def __init__(self, default_factory=None, *args, **kwargs):
        self.__data = defaultdict(default_factory)
        super().__init__(*args, **kwargs)

    def _callmethod(self, methodname, args=(), kwds={}):
        return getattr(self.__data, methodname)(*args, **kwds)

    def _getvalue(self):
        return self.__data.copy()

    def __repr__(self):
        return self.__data.__repr__()

    def __str__(self):
        return self.__data.__str__()

Manager.register('defaultdict', ProxyDefaultDict)
Run Code Online (Sandbox Code Playgroud)

最终目标是拥有一个共享字典,可以跨进程和线程安全地共享键控锁.以下是我将如何初始化图像的示例:

if __name__ == '__main__':
    m = Manager()
    d = m.defaultdict(m.Lock)
    with d['named_lock']:
        print('holding the lock')
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了一些问题:

  1. BaseManager的子类似乎只能通过上下文管理器进行初始化,即 …

python multiprocessing subclassing python-multiprocessing

7
推荐指数
1
解决办法
610
查看次数

有没有办法在运行中创建子类?

我正在创建一个游戏,其中我有一个复杂的方法来创建实体.

加载级别时,加载代码会读取一堆YAML文件,这些文件包含所有不同可能单元的属性.使用YAML文件,它创建一个所谓的EntityResource对象.此EntityResource对象在生成新单元时充当信息的权威来源.目标是双重的:

  1. 通过对YAML文件的输出执行散列检查来确定作弊行为
  2. 通过让所有单元信息来自单个权威来源来帮助调试.

EntityResource然后将这些对象馈送到EntityFactory对象中以生成特定类型的单元.

我的问题如下. 有没有办法EntityResource根据正在读入的YAML文件的内容动态创建子图?

另外,我希望为这些YAML文件派生的每个子类分配一个单独的元类.有什么警告吗?

python singleton class subclass subclassing

6
推荐指数
2
解决办法
6318
查看次数

Objective-C可变子类模式?

在Objective-C中是否有用于实现可变/不可变对象类对的标准模式?我目前有类似以下内容,我根据此链接编写

不可变类:

@interface MyObject : NSObject <NSMutableCopying> {
    NSString *_value;
}

@property (nonatomic, readonly, strong) NSString *value;
- (instancetype)initWithValue:(NSString *)value;

@end

@implementation MyObject
@synthesize value = _value;
- (instancetype)initWithValue:(NSString *)value {
    self = [self init];
    if (self) {
        _value = value;
    }
    return self;
}


- (id)mutableCopyWithZone:(NSZone *)zone {
    return [[MyMutableObject allocWithZone:zone] initWithValue:self.value];
}

@end
Run Code Online (Sandbox Code Playgroud)

可变类:

@interface MyMutableObject : MyObject
@property (nonatomic, readwrite, strong) NSString *value;
@end


@implementation MyMutableObject
@dynamic value;

- (void)setValue:(NSString *)value {
    _value = value; …
Run Code Online (Sandbox Code Playgroud)

design-patterns objective-c mutable subclassing ios

6
推荐指数
1
解决办法
1494
查看次数