问题列表 - 第4789页

我可以从超类中实例化一个子类对象

我有以下示例代码:

class A(object):
    def __init__(self, id):
        self.myid = id
    def foo(self, x):
        print 'foo', self.myid*x

class B(A):
    def __init__(self, id):
        self.myid = id
        self.mybid = id*2
    def bar(self, x):
        print 'bar', self.myid, self.mybid, x
Run Code Online (Sandbox Code Playgroud)

使用时,可以生成以下内容:

>>> a = A(2)
>>> a.foo(10)
foo 20
>>> 
>>> b = B(3)
>>> b.foo(10)
foo 30
>>> b.bar(12)
bar 3 6 12
Run Code Online (Sandbox Code Playgroud)

现在让我说我有更多的子类class C(A):class D(A):.我也知道id总是适合B,C或D,但同时也不会在2中.

现在我想调用A(23)并获得正确子类的对象.像这样的东西:

>>> type(A(2))
<class '__main__.B'>
>>> type(A(22))
<class '__main__.D'>
>>> type(A(31))
<class '__main__.C'>
>>> type(A(12)) …
Run Code Online (Sandbox Code Playgroud)

python oop

4
推荐指数
1
解决办法
1869
查看次数

在C#4.0中,为什么方法中的out参数不能协变?

鉴于这个神奇的界面:

public interface IHat<out TRabbit>
{
    TRabbit Take();
}
Run Code Online (Sandbox Code Playgroud)

而这个类层次结构:

public class Rabbit { }

public class WhiteRabbit : Rabbit { }
Run Code Online (Sandbox Code Playgroud)

我现在可以编译这个:

IHat<WhiteRabbit> hat1 = null;
IHat<Rabbit> hat2 = hat1;
Run Code Online (Sandbox Code Playgroud)

哪个好.但是如果我以不同的方式定义界面呢:

public interface IHat<out TRabbit>
{
    bool Take(out TRabbit r);
}
Run Code Online (Sandbox Code Playgroud)

我指出帽子可能是空的,使用单独的布尔返回值(之前的版本可能会从空帽子返回一个空兔子).但我仍然只输出一只兔子,所以没有做任何与以前版本逻辑上不同的事情.

CTP中的C#4.0编译器在接口定义中给出了错误 - 它要求'out'方法参数为不变类型.是否有一个强硬的原因,为什么不允许这样做,或者是否可以在未来版本中解决这个问题?

c# out covariance c#-4.0

16
推荐指数
1
解决办法
1821
查看次数

在C#泛型中,Java通配符的等价物是什么

我正在开发一个应用程序,我需要调用泛型类的方法,而不关心实例的实际类型.像下面的Java代码:

public class Item<T>{
  private T item;

  public doSomething(){...}
}

...
public void processItems(Item<?>[] items){
 for(Item<?> item : items)
   item.doSomething();
}
Run Code Online (Sandbox Code Playgroud)

当时我很着急,所以我通过使用我需要调用的方法定义一个接口并使泛型类实现它来解决我的问题.

public interface IItem  
{
   void doSomething();
}

public class Item<T> : IItem {
  private T item;

  public void doSomething(){...}
}

...
public void processItems(IItem[] items)
{
 foreach(IItem item in items)
   item.doSomething();
}
Run Code Online (Sandbox Code Playgroud)

这种解决方法工作正常,但我想知道实现相同行为的正确方法是什么.

编辑:

我忘了提到调用者processItems不知道实际的类型.实际上,这个想法是作为参数传递的数组processItems可能包含混合类型.由于在.Net中不可能有这样的数组,因此使用非泛型基类或接口似乎是唯一的方法.

c# generics wildcard

20
推荐指数
1
解决办法
1万
查看次数

为什么在生产中使用MakeCert工具制作的证书不好?

我目前正在开发一个项目,我已经为该CA证书创建了CA证书和几个子证书.这些证书将用于保护SAMLV2设置中的服务器间通信,因此我将获得身份提供者的证书和服务提供者的证书.用户/浏览器不会验证证书,因此只有服务器需要信任我的自定义CA. 我的证书树看起来像这样:

  • CustomRootCACert
    • CustomIdentityProviderCert
    • CustomServiceProviderCert

现在,我听到很多人说在生产中使用自制证书是不好的.但是,当我问为什么时,人们通常会嘀咕一些关于安全性但却从不详细说明.是否有任何技术原因不在生产中使用我自己的证书?我想不出任何......当然我意识到,如果我失去了对我的根证书的控制,任何人都可以开始创建各种证书.但在这种情况下,他们还必须在我的服务器上安装证书并配置saml应用程序以使用它们.只有这样他们才能开始生成假的saml请求和对我的应用程序的响应.

如果这是唯一的问题,这个解决方案(在生产中使用自制的证书)仍然会比我们今天的登录设置更好.

security ssl certificate certificate-authority saml

11
推荐指数
3
解决办法
4513
查看次数

如何忽略存储在PowerShell字符串变量中的转义序列?

在我的PowerShell脚本中,我在许多文件上运行Select-String,查找通过变量($ id)传递给它的字符串:

foreach ($file in (ls "path\to\files")) {
    $found = $false
    $found = Select-String -Path $file $id -Quiet
    if ($found) {
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,$ id变量有时会像"\ C"或"\ T"这样,Select-String会尝试将其解释为转义序列.这些不是有效的转义序列,因此Select-String会引发错误.它们不是转义序列(例如,它可能是文件路径的一部分,例如"C:\ Test"),那么如何防止PowerShell/Select-String将它们解释为?我试过在$ id周围使用括号而没有运气.

regex powershell escaping

20
推荐指数
1
解决办法
2万
查看次数

PHP在MySQL中存储图像与否?

我已经在PHP中构建了一个小型Web应用程序,用户必须首先登录.一旦登录,我打算在他们的"个人资料"中显示一个小缩略图.

我必须确保图像低于特定大小以节省空间,或确保它是特定分辨率,或两者兼而有之,或者甚至可能使用像magick这样的图像来缩小它.
不知道最好的方法是什么,欢迎任何想法.

此外,我一直在努力研究如果最好将图像users作为blob 存储在MySQL表中,或者可能是一个images具有唯一ID 的单独表,并且只需将相应的图像ID存储在users表中,或者只是保存服务器上的上传文件(也通过上传页面)并将文件另存为theUsersUniqueUsername.jpg.最佳选择?

我在这里找到了一个关于将图像保存到mysql的教程:http: //www.phpriot.com/articles/images-in-mysql

我只是一个业余爱好程序员,以前从未做过这样的事情,所以很多人都非常感谢你们的例子和/或很多细节.

php mysql image

31
推荐指数
7
解决办法
3万
查看次数

Perl中正则表达式的双重插值

我有一个Perl程序,它在配置文件中存储正则表达式.它们的形式如下:

regex = ^/d+$
Run Code Online (Sandbox Code Playgroud)

在其他地方,正则表达式从文件中解析并存储在变量中 - $regex.然后我在检查正则表达式时使用变量,例如

$lValid = ($valuetocheck =~ /$regex/);
Run Code Online (Sandbox Code Playgroud)

我希望能够在配置文件中包含perl变量,例如

regex = ^\d+$stored_regex$
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何做到这一点.

当Perl解析正则表达式时,它们会被解释两次.首先扩展变量,然后解析正则表达式本身.

我需要的是一个三阶段过程:首先插入$regex,然后插入它包含的变量,然后解析生成的正则表达式.前两个插值都需要"正则表达式识别".例如,他们应该知道字符串包含$锚等...

有任何想法吗?

regex perl interpolation

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

css垂直居中

我怎么能垂直居中<div>内的<div>

我的代码到目前为止:

<div style="height:322px;overflow:auto;">
    <div style="border: Solid 1px #999999;padding:5px;">
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我试过"顶级:50%;" 和"vertical-align:middle;" 没有成功

编辑:好的,所以它已被讨论了很多.而且我可能会开始另一场迷你火焰战.但为了争论,我怎么用桌子做呢?到目前为止,我已经将css用于其他所有事情,所以我并不想尝试使用"良好实践".

编辑:内部div没有固定的高度

css

24
推荐指数
4
解决办法
9708
查看次数

Linq Sub-Select

如何在LINQ中编写子选择.

如果我有一个客户列表和一个订单列表,我希望所有没有订单的客户.

这是我的伪代码尝试:

    var  res = from c in customers 
where c.CustomerID ! in (from o in orders select o.CustomerID) 
select c
Run Code Online (Sandbox Code Playgroud)

c# linq outer-join

15
推荐指数
2
解决办法
4万
查看次数

Chrome/Safari忽略了我的重置规则?

链接文字

在Safari/Chrome中,它在ol,blockquotes和其他元素的左侧/顶部有额外的间距.

我无法隔离这一点,但是当我在Safari中查看Web检查器时,它在一些元素上获得了26px的边距.我没有指定任何此类规则,这是Web检查器中的错误吗?

有人可以告诉我为什么这些exta间距问题正在发生?谢谢!

css safari google-chrome

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