我已经将两个类的公共属性分解为一个抽象基类,但是我有另一个模型需要引用其中一个类.不可能引用ABC,因为它实际上没有数据库表.
以下示例应说明我的问题:
class Answer(models.Model):
ovramt = models.ForeignKey("Ovramt")
question = models.ForeignKey("Question")
answer = models.CharField(max_length=3, choices=(("yes","yes"),("no","no") ("NA","N/A"))
likelihood = models.IntegerField(choices=LIKELY_CHOICES)
consequence = models.IntegerField(choices=CONSEQUENCE_CHOICES)
class Meta:
abstract = True
class Answer_A(Answer):
resident = models.ForeignKey("Resident")
def __unicode__(self):
return u"%s - %s - %s" %(self.ovramt.ssa.name, self.resident, self.question)
class Answer_B(Answer):
def __unicode__(self):
return u"%s - %s" %(self.ovramt.ssa.name, self.question)
class Answer_Risk(models.Model):
answer = models.ForeignKey("Answer")
risk = models.CharField(max_length=200)
def __unicode__(self):
return self.risk
Run Code Online (Sandbox Code Playgroud)
Answer_A和Answer_B略有不同,Answer_A还需要与另一个表的FK关系.Answer_B以后可能还需要一些特定的属性.如果我将Answer_B作为超类 - 并且具有Answer_A子类或组成它,那么问题仍然存在.
无论是Answer_A还是Answer_B,'风险'都是相同的.我还有其他模型需要引用'答案'而不管它的子类型.如何才能做到这一点?无论它的子类型如何,您如何引用类型?
更新:
我试图避免加入操作但我不认为我能够.是否值得在所有'答案'中引用'Resident'并在必要时将其归零?或者这被认为是非常糟糕的做法?
在时钟应用程序,计时器屏幕显示了一个选择器(可能是一个UIPicker在UIDatePickerModeCountDownTimer模式),在选择栏一些文本("小时",并在这种情况下,"分钟").
(编辑)请注意,这些标签是固定的:当拣选轮滚动时,它们不会移动.
有没有办法在标准UIPickerView组件的选择栏中显示这样的固定标签?
我没有找到任何有助于此的API.建议是添加一个UILabel作为选择器的子视图,但这不起作用.
回答
我按照Ed Marty的建议(下面回答),它的确有效!不完美,但它应该骗人.作为参考,这是我的实现,随意让它变得更好......
- (void)viewDidLoad {
// Add pickerView
self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectZero];
[pickerView release];
CGSize pickerSize = [pickerView sizeThatFits:CGSizeZero];
CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
#define toolbarHeight 40.0
CGFloat pickerTop = screenRect.size.height - toolbarHeight - pickerSize.height;
CGRect pickerRect = CGRectMake(0.0, pickerTop, pickerSize.width, pickerSize.height);
pickerView.frame = pickerRect;
// Add label on top of pickerView
CGFloat top = pickerTop + 2;
CGFloat height = pickerSize.height - …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一组按键映射到一组命令.因为我处理来自多个地方的命令,所以我想在键和命令之间设置一个抽象层,这样如果我更改底层键映射,我就不必更改很多代码.我目前的尝试看起来像这样:
// input.h
enum LOGICAL_KEYS {
DO_SOMETHING_KEY,
DO_SOMETHING_ELSE_KEY,
...
countof_LOGICAL_KEYS
};
static const SDLKey LogicalMappings[countof_LOGICAL_KEYS] = {
SDLK_RETURN, // Do Something
SDLK_ESCAPE, // Do Something Else
...
};
// some_other_file.cpp
...
switch( event.key.keysym.key ) {
case LogicalMappings[ DO_SOMETHING_KEY ]:
doSomething();
break;
case LogicalMappings[ DO_SOMETHING_ELSE_KEY ]:
doSomethingElse();
break;
...
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它(gcc 4.3.2)时,我收到错误消息:
错误:'LogicalMappings'不能出现在常量表达式中
我不明白为什么编译器有这个问题.我理解为什么你不允许在case语句中包含变量,但我认为你可以使用常量,因为它们可以在编译时进行评估.常量数组不适用于switch语句吗?如果是这样,我想我可以用以下代码替换数组:
static const SDLKey LOGICAL_MAPPING_DO_SOMETHING = SDLK_RETURN;
static const SDLKey LOGICAL_MAPPING_DO_SOMETHING_ELSE = SDLK_ESCAPE;
...
Run Code Online (Sandbox Code Playgroud)
但这似乎不那么优雅.有人知道为什么你不能在这里使用常数数组吗?
编辑:我已经看到C++标准的一点声称,"一个整数常量表达式只能涉及文字(2.13),枚举器,常量变量或用常量表达式初始化的整数或枚举类型的静态数据成员(8.5) ...".我仍然不明白为什么常量数组不算作"用常量表达式初始化的枚举类型".可能只是我的问题的答案是"因为它就是它的方式",我将不得不解决它.但如果是这种情况,那就有点令人失望,因为编译器确实可以在编译时确定这些值.
这对于一个大师来说应该是直截了当的.我没有真正写出任何代码,只有几个控制器和一个自定义UIView.全部通过笔尖连接.该应用程序加载而不会崩溃,但我无法从我的自定义UIView中看到我的NSLog()命中.
我的应用程序委托具有默认模板代码,该代码调用我的一个名为TabAnimationController的类.TabAnimationViewController将其视图设置为TabView.我确保在TabAnimationViewController的NIB中,File的所有者设置为TabAnimationViewController,并且我的UIView实例将其类设置为TabView.
在TabView.m中,我试图了解NSLog将如何命中,并且它根本没有显示出来.
- (void)loadView {
NSLog(@"calling loadView");
}
- (id)initWithFrame:(CGRect)frame {
NSLog(@"Calling initWithFrame:");
return self;
}
Run Code Online (Sandbox Code Playgroud)
奇怪.我不确定为什么即使在正确的IB连接之后我的NSLog也不会出现.只有任何放入drawRect的东西:才会调用.为什么initWithFrame或loadView不会受到影响?如果我想以编程方式自定义此视图,该怎么办?
我想确保我只在特定的类中为一个实例上的事件订阅一次.
例如,我希望能够做到以下几点:
if (*not already subscribed*)
{
member.Event += new MemeberClass.Delegate(handler);
}
Run Code Online (Sandbox Code Playgroud)
我该如何实施这样的警卫?
如果我有2个端子A和B. TA通过安全插座连接连接TB.我需要编写代码来实现2个终端之间的连接.
如何使用Keystore和Truststore进行握手此类连接.换句话说,我在哪里放置密钥库/信任库证书文件?(TA或TB)
非常感谢任何好的建议或好的例子.
谢谢
是否有相当于get_defined_functions()仅显示给定对象的功能?
用法和输出示例:
class A {
function foo() { }
function bar() { }
}
class B extends A {
function foobar() { }
}
$b = new B();
print_r(get_object_functions($b));
// Array (
// 0 => "foo",
// 1 => "bar",
// 2 => "foobar"
//)
Run Code Online (Sandbox Code Playgroud) 我正在编写一个Windows C#应用程序,我希望使用数据网格视图,但无法找到一个好的教程来完全控制datagrid,例如:添加列,添加数据等.
我对他们编写的Python中有多少前期验证感兴趣.
以下是一些简单函数的示例:
def factorial(num):
"""Computes the factorial of num."""
def isPalindrome(inputStr):
"""Tests to see if inputStr is the same backwards and forwards."""
def sum(nums):
"""Same as the built-in sum()... computes the sum of all the numbers passed in."""
Run Code Online (Sandbox Code Playgroud)
在开始计算之前检查输入值有多彻底,如何进行检查?如果输入有问题(例如,在同一模块中定义了BadInputException),是否会抛出某种专有异常?你刚刚开始你的计算,并认为如果传入错误的数据(例如,"asd"到factorial),它会在某个时刻抛出异常吗?
当传入的值应该是一个容器时,你不仅检查容器,还检查其中的所有值?
那些像factorial这样的情况怎么样,传入的内容可以转换为int(例如浮点数),但这样做可能会失去精度?
如何从生成器对象中构建numpy数组?
让我来说明一下这个问题:
>>> import numpy
>>> def gimme():
... for x in xrange(10):
... yield x
...
>>> gimme()
<generator object at 0x28a1758>
>>> list(gimme())
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> numpy.array(xrange(10))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> numpy.array(gimme())
array(<generator object at 0x28a1758>, dtype=object)
>>> numpy.array(list(gimme()))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)
在这个例子中,gimme()是我想要变成数组的输出的生成器.但是,数组构造函数不会迭代生成器,它只是存储生成器本身.我想要的行为来自numpy.array(list(gimme())),但我不想支付同时在内存中使用中间列表和最终数组的内存开销.有更节省空间的方式吗?
python ×3
cocoa-touch ×2
arrays ×1
c# ×1
c++ ×1
const ×1
datagridview ×1
django ×1
events ×1
function ×1
generator ×1
inheritance ×1
iphone ×1
java ×1
keystore ×1
numpy ×1
php ×1
reflection ×1
security ×1
subscription ×1
syntax ×1
truststore ×1
uipickerview ×1
validation ×1
winforms ×1