标签: subclassing

Fluent nHibernate - DiscriminateSubClassesOnColumn 与多个表?

几天来,我一直试图围绕子类并在 Fluent nHibernate 中加入子类,但没有取得任何进展。我查看了 wiki,但它似乎没有给我足够的信息,谷歌搜索会返回使用折旧代码或看似无关的旧结果。

我只想要一个简单的例子,如果可能的话

我有四个看起来像这样的表:

+--------------+  +---------------+  +---------------+
| Animal       |  | AnimalType    |  | Reptile       |
+==============+  +===============+  +===============+
| Id           |  | Id            |  | AnimalId      |
| AnimalTypeId |  | Description   |  | TongueLength  |
| version      |  +---------------+  +---------------+
+--------------+
Run Code Online (Sandbox Code Playgroud)

所以 Animal 表有一个引用 AnimalType 表的 FK,一个只包含 1 个 Id 的查找表,作为测试,

1 = 爬行动物

这个想法是,AnimalTypeId 列是我的鉴别器列,它拆分了我的子类,并且每个动物表(爬行动物)都有 FK 主键,它们根据其 AnimalTypeId 引用来自 Animal 表的 Id。

所以我的 C# 类看起来像这样

public class Animal
{
    public virtual int Id {get;set;} …
Run Code Online (Sandbox Code Playgroud)

c# subclass fluent-nhibernate joined-subclass subclassing

6
推荐指数
0
解决办法
5548
查看次数

修改子类字符串

我有以下字符串子类:

class S(str):
    def conc(self, next_val, delimiter = ' '):
        """Concatenate values to an existing string"""
        if not next_val is None:
            self = self + delimiter + next_val
        return self
Run Code Online (Sandbox Code Playgroud)

我希望这可以工作如下:

>>> x = S("My")
>>> x.conc("name")
'My name'
>>> x
'My name'
Run Code Online (Sandbox Code Playgroud)

相反,我得到了这个:

>>> x = S("My")
>>> x.conc("name")
'My name'
>>> x
'My'
Run Code Online (Sandbox Code Playgroud)

有没有办法修改字符串到位? 我认为这涉及到可变字符串和不可变字符串之间的区别.子类化似乎是将字符串视为可变对象的正确方法(至少根据python文档),但我认为我在实现中缺少一些关键部分.

python subclassing

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

为什么没有OutOfMemoryError子类?

众所周知,有多种原因OutOfMEmoryError(见第一个答案).为什么只有一个例外情况涵盖了所有这些情况而不是继承的多个细粒度情况OutOfMEmoryError

UML

java exception out-of-memory subclassing

6
推荐指数
3
解决办法
538
查看次数

单身人士测试和子类化

我在使用picocontainer时看到了这一点.他们说你必须避免单身.因为Singleton模式使得类(以及可能依赖于它的所有其他类)几乎不可能是可测试的.子类化或为Singleton类创建模拟对象非常困难.

但是如果你绝对需要它,那么测试和子类化问题是否有解决方法?

testing singleton design-patterns subclassing

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

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

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

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

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

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

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

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

python singleton class subclass subclassing

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

在python中使用'autospec = True'时模拟类属性

我希望模拟一个具有以下要求的课程:

  • 该类具有公共读/写属性,在其__init__()方法中定义
  • 该类具有公共属性,该属性在对象创建时自动递增
  • 我希望使用autospec=True,所以类的API将严格检查调用

简化的班级样本:

class MyClass():
    id = 0

    def __init__(self, x=0.0, y=1.0):
        self.x = x
        self.y = y
        self.id = MyClass._id
        MyClass.id +=1

    def calc_x_times_y(self):
        return self.x*self.y

    def calc_x_div_y(self, raise_if_y_not_zero=True):
        try:
            return self.x/self.y
        except ZeroDivisionError:
            if raise_if_y_not_zero:
                raise ZeroDivisionError
            else:
                return float('nan')
Run Code Online (Sandbox Code Playgroud)

我需要模拟对象的行为与原始对象一样,就属性而言:

  • 它应该自动递增分配给每个新创建的模拟对象的id
  • 它应该允许访问它的x,y属性但模拟方法调用应该被mock拦截,并验证其调用签名

关于这个问题的最佳方法是什么?

编辑

我已经尝试了几种方法,包括继承Mock类,使用attach_mock()mock_add_spec(),但总是遇到一些死胡同.

我正在使用标准的模拟库.

python attributes properties mocking subclassing

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

我应该如何使用超类的实例构造子类?

假设我有以下代码

public class SuperClass {
    protected int super_class_value;

    public SuperClass (int value) {
        this.super_class_value = value;
    }
}

public class Subclass extends SuperClass {
    protected int subclass_value;

    public SubClass(int super_class_value, int subclass_value) {
        super(super_class_value);
        this.subclass_value = subclass_value;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,现在我希望能够将 SuperClass 对象传递给 SubClass 构造函数。我该怎么做?

public SubClass(SuperClass super_class, int subclass_value) {
    //What do I do here?
    this.subclass_value = subclass_value;
}
Run Code Online (Sandbox Code Playgroud)

基本上,我想做这样的事情......

public SubClass(SuperClass super_calss, int subclass_value) {
    super(super_class.super_class_value);
    this.subclass_value = subclass_value;
}
Run Code Online (Sandbox Code Playgroud)

但是如果 SuperClass 更复杂,我不想将每个值添加到 super() 调用中。相反,我想简单地传入一个已经存在的对象,并将其用作超类。

我想做这个...

public SubClass(SuperClass super_class, …
Run Code Online (Sandbox Code Playgroud)

java inheritance object-construction subclassing

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

覆盖 UIImage(named:)

我正在重写 UIImage 类方法init(named:)。我的目标是能够检索图像的文件名。

代码如下所示:

class UIImageWithFileName: UIImage {

    let fileName: String

    override init(named:String){
        super.init(named)
    fileName = named
    }
}
Run Code Online (Sandbox Code Playgroud)

由于以下原因,此代码似乎是不可能的。

我创建了一个 UIImage 的子类,开始输入 init... 令我惊讶的是没有 init(named:) 方法可以覆盖。这是 init 方法的完整列表:

在此处输入图片说明

在此处输入图片说明

如何覆盖UIImage init(named:)

overriding initialization uiimage subclassing ios

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

类不能使用 mypy 子类化“QObject”(类型为“Any”)

我有一个继承 QObject 的类。一切正常,但是当我在其上运行 mypy 时,出现错误:

"error: Class cannot subclass 'QObject' (has type 'Any')" 
Run Code Online (Sandbox Code Playgroud)

此刻我完全被困住了。我一直在阅读 mypy 文档,但找不到错误所在。

这里的代码:

from PyQt5.QtCore import QObject

class ServiceLocator(QObject):

    def __init__(self) -> None:
        super().__init__()
        ...
Run Code Online (Sandbox Code Playgroud)

干杯。

python pyqt type-hinting subclassing mypy

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

子类 DataFrame 的 Pandas groupby、resample 等

注意:下面的线程提示了一个 pull request,它最终被合并到v1.10 中。此问题现已解决。

我正在使用子类化的 DataFrame,以便我可以更方便地访问某些特定于我的用例的转换方法和元数据。大多数 DataFrame 操作按预期工作,因为它们返回子类的实例,而不是pandas.DataFrame. 然而,聚合操作喜欢DataFrame.groupby并且DataFrame.resample似乎把这搞砸了。

这是一个错误,还是在定义我的子类时遗漏了什么?

下面是一个最小的例子,在 Pandas 0.25.1 上测试过:

class MyDataFrame(pd.DataFrame):
    @property
    def _constructor(self):
        return MyDataFrame

dates = pd.date_range('2019', freq='D', periods=365)
my_df = MyDataFrame(range(len(dates)), index=dates)

assert isinstance(my_df, MyDataFrame)
# Success!

assert isinstance(my_df.diff(), MyDataFrame)
# Success!

assert isinstance(my_df.sample(10), MyDataFrame)
# Success!

assert isinstance(my_df[:10], MyDataFrame)
# Success!

assert isinstance(my_df.resample("D").sum(), MyDataFrame)
# AssertionError

assert isinstance(my_df.groupby(df.index.month).sum(), MyDataFrame)
# AssertionError
Run Code Online (Sandbox Code Playgroud)

python subclassing dataframe pandas

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