javascript

git

java

python

git-remote

reactjs

c++

github

django

c#

.net

.net-framework-version

operators

git-fetch

typescript

user-experience

chmod

css

content-type

variables

python-如何警告类(名称)弃用

我已经重命名了作为库一部分的python类。 我愿意保留一段时间使用其以前的名称,但想警告用户它已被弃用,将来会被删除。

我认为,为了提供向后兼容性,使用这样的别名就足够了:

class NewClsName:
    pass

OldClsName = NewClsName

我不知道如何以优雅的方式将OldClsName标记为已弃用。 也许我可以使OldClsName这个函数发出警告(记录)并根据其参数构造NewClsName对象(使用*args**kvargs),但它看起来不够优雅(或者也许是?)。

但是,我不知道Python标准库弃用警告的工作方式。 我想可能会有一些不错的魔术来处理弃用问题,例如 允许将其视为错误或沉默,具体取决于某些解释程序的命令行选项。

问题是:如何警告用户有关使用过时的类别名(或一般而言过时的类)。

编辑:函数方法对我不起作用(我已经尝试过),因为该类具有某些类方法(工厂方法),当将OldClsName定义为函数时,这些方法不能调用。 以下代码不起作用:

class NewClsName(object):
    @classmethod
    def CreateVariant1( cls, ... ):
        pass

    @classmethod
    def CreateVariant2( cls, ... ):
        pass

def OldClsName(*args, **kwargs):
    warnings.warn("The 'OldClsName' class was renamed [...]",
                  DeprecationWarning )
    return NewClsName(*args, **kwargs)

OldClsName.CreateVariant1( ... )

因为:

AttributeError: 'function' object has no attribute 'CreateVariant1'

继承是我唯一的选择吗? 老实说,在我看来,它看起来不是很干净-它通过引入不必要的派生影响类的层次结构。 此外,OldClsName在大多数情况下不是问题,但是在使用该库编写的代码不好的情况下可能是个问题。

我也可以创建一个虚拟的,无关的OldClsName类,并为其中的所有类方法实现构造函数以及包装器,但是我认为这是更糟糕的解决方案。

trans by 2020-08-03T04:56:57Z

Visual Studio 2017向后兼容Visual Studio 2015解决方案吗?

我正在考虑安装VS 2017并将其用于工作。 免费下载在这里。

那么Visual Studio 2017 RC是否向后兼容Visual Studio 2015解决方案?

发行说明在此提及。 只是想知道是否有人这样做以及他们是否有任何问题。

编辑(更新)

自2017年2月1日以来,我一直在与2017RC合作,并且我确认它根本不会更改proj或sln文件,即使您在proj / sln中添加/删除文件也不例外(当然是为了反映文件更改) )。

在2012/2013/2015商店中使用非常安全!!!

trans by 2020-07-27T12:12:56Z

Java版本之间是否存在向后不兼容的特定示例?

Java版本之间是否存在不兼容的问题,其中针对Java版本X的Java源代码/ Java类文件不会在版本Y(其中Y> X)下编译/运行?

“ Java版本”是指诸如以下的版本:

  • JDK 1.0(1996年1月)
  • JDK 1.1(1997年2月)
  • J2SE 1.2(1998年12月)
  • J2SE 1.3(2000年5月)
  • J2SE 1.4(2002年2月)
  • J2SE 5.0(2004年9月)
  • Java SE 6(2006年12月)

家庭规则:

  • 请尽可能包含参考资料和代码示例。
  • 请在回答中尽量具体/具体。
  • 被标记为@Deprecated的类不算作向后不兼容。
trans by 2020-02-12T15:27:21Z

向后兼容性-用Java 8开发的程序可以在Java 7上运行吗?

我有点困惑。

  1. Oracle说Java 8与Java 7(向后)高度兼容。 但是,存在Java 8程序可以成功在Java 7(SE / EE)上成功运行的可能性吗?

  2. 如果第一点是正确的,那么将在Java 7服务器支持上部署和执行Java 8应用程序吗? 例如Tomcat 8或WildFly?

trans by 2020-02-08T14:41:59Z

Visual Studio 2012 csproj是否向后兼容2010?

问题是,是否可以安全地使用Visual Studio 2012编辑项目属性,添加和删除解决方案,引用,所有这些都与NET 4.0 Framework有关。

我记得过去某些文件可能已“损坏”,而Visual Studio 2010更改了一些Visual Studio 2008 csproj信息(xml文件)。

如果在VS2012中添加/删除了某些标签,则csproj将与VS2010开发人员不兼容。

如果可以安全使用此新IDE而不损坏文件,是否有人知道一些信息?VS2012 csprojs是否与VS2010“向后兼容”?

trans by 2020-01-19T21:08:35Z

C ++-std :: vector,默认构造,C ++ 11和重大更改

我今天遇到一个非常微妙的问题,我想请您发表意见。

考虑以下花园品种共享体习语类:

struct S
{
    S() : p_impl(new impl) {}
private:
    struct impl;
    boost::shared_ptr<impl> p_impl;
};

当您尝试通过以下方式将它们放入向量中时,会很有趣:

std::vector<S> v(42);

现在,至少使用MSVC 8,S中的所有元素都共享相同的n成员。 实际上,导致此问题的原因是vector构造函数:

template <typename T, typename A = ...>
class vector
{
    vector(size_t n, const T& x = T(), const A& a = A());
    ...
};

在场景下,仅默认构造了一个S对象,并从其中复制了vectorn元素。

现在,在C ++ 11中,有右值引用。 因此它不能像这样工作。 如果将S构造为

std::vector<S> v(42);

那么最有可能的是,实现可能会选择默认在向量内部构造S对象,因为复制构造可能不可用。 在这种情况下,这将是一个重大变化。

我的问题是:

  1. C ++ 03标准是否要求S必须具有上面定义的构造函数,即。 带有默认参数? 特别是,可以保证矢量对象的条目被复制而不是默认构造的吗?
  2. 关于这一点,C ++ 11标准怎么说?
  3. 我认为这是在C ++ 03和C + 11之间进行重大更改的可能性。 这个问题已经调查过了吗? 解决了 ?

PS:请不要对上面的类S的默认构造函数发表评论。 正是这种或实施某种形式的惰性构造。

trans by 2020-01-14T15:13:57Z

向后兼容性-如何编写为C ++模块准备的C ++?

已经有两种支持C ++模块的编译器:

  • 叮当声:[http://clang.llvm.org/docs/Modules.html]
  • MS VS 2015:[http://blogs.msdn.com/b/vcblog/archive/2015/12/03/c-modules-in-vs-2015-update-1.aspx]

现在开始一个新项目时,当最终在编译器中发布模块功能时,我应该注意什么?

是否可以使用模块并仍与不支持该模块的较旧编译器保持兼容性?

trans by 2019-12-30T20:08:13Z

为什么Python 3不向后兼容?

我了解到Python 3不向后兼容。

使用旧版本的Python会不会影响很多应用程序?

Python 3的开发人员怎么不认为使其向后兼容绝对必要?

trans by 2019-10-10T08:16:10Z

printf - Python的许多字符串格式化方法 - 旧的(将要)被弃用了吗?

Python至少有六种格式化字符串的方法:

In [1]: world = "Earth"

# method 1a
In [2]: "Hello, %s" % world
Out[2]: 'Hello, Earth'

# method 1b
In [3]: "Hello, %(planet)s" % {"planet": world}
Out[3]: 'Hello, Earth'

# method 2a
In [4]: "Hello, {0}".format(world)
Out[4]: 'Hello, Earth'

# method 2b
In [5]: "Hello, {planet}".format(planet=world)
Out[5]: 'Hello, Earth'

# method 2c
In [6]: f"Hello, {world}"
Out[6]: 'Hello, Earth'

In [7]: from string import Template

# method 3
In [8]: Template("Hello, $planet").substitute(planet=world)
Out[8]: 'Hello, Earth'

不同方法的简要历史:

  • 自Pythons婴儿期以来,printf风格的格式一直存在
  • printf类是在Python 2.4中引入的
  • printf方法是在Python 2.6中引入的
  • printf-strings在Python 3.6中引入

我的问题是:

  • 是否已弃用或将弃用printf样式的格式?
  • printf中,是否已弃用或将弃用PendingDeprecationWarning方法? (我不是在谈论safe_substitute,据我所知,它提供了独特的功能)

类似的问题以及为什么我认为它们不重复:

  • Python字符串格式:%vs. .format - 仅处理方法1和2,并询问哪一个更好; 我的问题是根据Python的Zen来明确地讨论弃用

  • 字符串格式化选项:优点和缺点 - 仅处理问题中的方法1a和1b,答案中的1和2,以及关于弃用的任何内容

  • 高级字符串格式与模板字符串 - 主要是关于方法1和3,并不涉及弃用

  • 字符串格式化表达式(Python) - 回答提到原计划'%'方法计划不推荐使用。 但计划弃用,待定弃用和实际弃用之间有什么区别? 并且printf风格的方法甚至不会提高PendingDeprecationWarning,所以这真的会被弃用吗? 这篇文章也很陈旧,所以信息可能已经过时了。

也可以看看

  • PEP 502:字符串插值 - 扩展讨论
  • String Formatter
trans by 2019-09-10T08:34:31Z

html5 - 现在可以使用<input type =“tel”/>吗?

我正在开发一个手机网络应用程序,我有几个文本字段,可以从<input type="tel"/>受益.iPhones将调整用户的键盘,但我担心打破向后兼容性。 我希望支持这一点的浏览器/手机可以帮助用户和其他浏览器回归到标准文本字段? 这是可接受的做法吗? 它甚至有用吗?

trans by 2019-07-14T19:06:34Z

如何在Windows 7中安装Python 2.x和Python 3.x.

我在Windows 7上使用Python 3.x进行大部分编程,但现在我需要使用Python Imaging Library(PIL),ImageMagick和wxPython,所有这些都需要Python 2.x.

我可以在Windows 7中安装Python 2.x和Python 3.x吗? 当我运行脚本时,我如何“选择”应该运行哪个版本的Python? 上述程序是否能够同时处理多个版本的Python? 我已经搜索了几个小时和几个小时来如何做到这一点无济于事。

谢谢。

trans by 2019-03-05T03:24:29Z

我可以将数组作为参数传递给Java中带有变量参数的方法吗?

我希望能够创建一个像这样的函数:

class A {
  private String extraVar;
  public String myFormat(String format, Object ... args){
    return String.format(format, extraVar, args);
  }
}

这里的问题是args在方法String.format(String format, Object[] args)中被视为Object[],因此是extraVar的单个参数,而我希望args中的每个args作为新参数传递。 由于String.format也是一个带有可变参数的方法,这应该是可能的。

如果这不可能,有没有像String.format(String format, Object[] args)这样的方法? 在这种情况下,我可以使用新数组将extraVar添加到args并将其传递给该方法。

trans by 2019-02-26T23:16:18Z

1 共1页