几天来,我一直试图围绕子类并在 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) 我有以下字符串子类:
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文档),但我认为我在实现中缺少一些关键部分.
众所周知,有多种原因OutOfMEmoryError(见第一个答案).为什么只有一个例外情况涵盖了所有这些情况而不是继承的多个细粒度情况OutOfMEmoryError?
我在使用picocontainer时看到了这一点.他们说你必须避免单身.因为Singleton模式使得类(以及可能依赖于它的所有其他类)几乎不可能是可测试的.子类化或为Singleton类创建模拟对象非常困难.
但是如果你绝对需要它,那么测试和子类化问题是否有解决方法?
我正在创建一个游戏,其中我有一个复杂的方法来创建实体.
加载级别时,加载代码会读取一堆YAML文件,这些文件包含所有不同可能单元的属性.使用YAML文件,它创建一个所谓的EntityResource对象.此EntityResource对象在生成新单元时充当信息的权威来源.目标是双重的:
EntityResource然后将这些对象馈送到EntityFactory对象中以生成特定类型的单元.
我的问题如下. 有没有办法EntityResource根据正在读入的YAML文件的内容动态创建子图?
另外,我希望为这些YAML文件派生的每个子类分配一个单独的元类.有什么警告吗?
我希望模拟一个具有以下要求的课程:
__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)
我需要模拟对象的行为与原始对象一样,就属性而言:
x,y属性但模拟方法调用应该被mock拦截,并验证其调用签名关于这个问题的最佳方法是什么?
编辑
我已经尝试了几种方法,包括继承Mock类,使用attach_mock()和mock_add_spec(),但总是遇到一些死胡同.
我正在使用标准的模拟库.
假设我有以下代码
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) 我正在重写 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:)
我有一个继承 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)
干杯。
注意:下面的线程提示了一个 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) subclassing ×10
python ×5
java ×2
singleton ×2
subclass ×2
attributes ×1
c# ×1
class ×1
dataframe ×1
exception ×1
inheritance ×1
ios ×1
mocking ×1
mypy ×1
overriding ×1
pandas ×1
properties ×1
pyqt ×1
testing ×1
type-hinting ×1
uiimage ×1