小编Mat*_*und的帖子

抽象类可以强制继承类将方法实现为静态吗?

Python 3.2以防万一...

以下代码显示"具体类"可以将some_method实现为静态方法或实例方法:

import abc

class SomeAbstractClass(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def some_method(self): pass

class ValidConcreteClass1(SomeAbstractClass):

    @staticmethod
    def some_method():
        print("foo!")

class ValidConcreteClass2(SomeAbstractClass):

    def some_method(self):
        print("foo!")

ValidConcreteClass1.some_method()

instance = ValidConcreteClass2()
instance.some_method()
Run Code Online (Sandbox Code Playgroud)

我的问题是,我可以强制some_method的实现在继承类中是静态的吗?

我注意到了@ abc.abstractstaticmethod,并认为这是答案,但以下代码仍然可以正常运行.我认为它会拒绝ValidConreteClass2,因为some_method不是静态的:

import abc

class SomeAbstractClass(metaclass=abc.ABCMeta):

    @abc.abstractstaticmethod
    def some_method(self): pass

class ValidConcreteClass1(SomeAbstractClass):

    @staticmethod
    def some_method():
        print("foo!")

class ValidConcreteClass2(SomeAbstractClass):

    def some_method(self):
        print("foo!")

ValidConcreteClass1.some_method()

instance = ValidConcreteClass2()
instance.some_method()
Run Code Online (Sandbox Code Playgroud)

python abstract-class

8
推荐指数
1
解决办法
1978
查看次数

可以防止调用init吗?

我正在编辑原始问题,因为我们都专注于你应该做的事情.我的问题是我能做到这一点和如何(理解可能有几种解决方案).所以我只想离开实际问题并删除背景.

假设我有一个基类和一个子类.我可以在基类中做些什么来防止在子类上调用__init__ - 或者至少抛出一个异常甚至是日志,如果__init__存在或在子类上被调用?我确实希望在父类上调用__init__方法.

编辑/结论 - 在探索答案中提出的选项后,我认为这样做会很糟糕.我将以不同的方式解决我的问题.尽管如此,希望下面的答案有助于其他人想要这样做.

python initialization

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

日志级别是否有近乎共识的准则?

我受到了我和我的团队在我最近两家公司使用的日志级别的影响.我会在这里分享我们的,但请记住这一点是主观的:

  • 致命 - 你的应用程序正在崩溃.
  • 错误 - 此操作或线程崩溃并烧毁.该应用程序可能会继续.
  • 警告 - 当前的操作可能会继续,但工程师需要调查一些事情.
  • 信息 - 解释您的操作正在做什么.
  • 调试 - 可能变得非常垃圾的操作的解释(内部循环等).

现在,我的客观问题是在这方面是否存在高度一致的风格.答案可能是否定的.但如果有这样的标准,你能指出一个URL吗?

另请注意,我并不关心实际配置什么阈值来记录部署/生产环境中有用的地方.相反,我的问题仅限于我们这些编写代码的人应该使用的指南.

我在我的问题上放了一个C#标签和Java标签.我们可能在这两个阵营中有不同的指导方针,但可能只有文化原因我们不同,而不是概念上的原因.

c# java logging

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

只获取没有模块等的类名

我可能忽略了一些简单的事情.给定一个类的实例,我想得到类名.例如:

class Foooo: pass
instance = Foooo()

print("instance.__class__ = "+str(instance.__class__))
print("Just the class name: "+str(instance.__class__).split(".")[-1][:-2])
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

instance.__class__ = <class '__main__.Foooo'>
Just the class name: Foooo
Run Code Online (Sandbox Code Playgroud)

有什么比这简单

str(instance.__class__).split(".")[-1][:-2]?
Run Code Online (Sandbox Code Playgroud)

如果有帮助的话,我在Python 3.2中

python

5
推荐指数
1
解决办法
2820
查看次数

Python - 将相对路径转换为绝对路径的任何方法?

current_working_directory = os.getcwd()
relative_directory_of_interest = os.path.join(current_working_directory,"../code/framework/zwave/metadata/")

files = [f for f in os.listdir(relative_directory_of_interest) if os.path.isfile(os.path.join(relative_directory_of_interest,f))]

for f in files:
    print(os.path.join(relative_directory_of_interest,f))
Run Code Online (Sandbox Code Playgroud)

输出:

/Users/2Gig/Development/feature_dev/scripts/../code/framework/zwave/metadata/bar.xml
/Users/2Gig/Development/feature_dev/scripts/../code/framework/zwave/metadata/baz.xml
/Users/2Gig/Development/feature_dev/scripts/../code/framework/zwave/metadata/foo.xml
Run Code Online (Sandbox Code Playgroud)

这些文件路径工作正常,但我想看到这些是绝对路径(没有任何../ - 我不知道为什么我关心,也许我是强迫症.我想我也觉得在登录时更容易看到标准python库(我在3.2)中是否有内置的东西可以将它们变成绝对路径?如果不是,那就没什么大不了的,但是一点点谷歌搜索只发现了第三方解决方案.

编辑:看起来像我想要的os.path.abspath(文件))所以上面的修改后的源码现在看起来像(不是我没有测试这个,它只是袖口):

current_working_directory = os.getcwd()
relative_directory_of_interest = os.path.join(current_working_directory,"../code/framework/zwave/metadata/")

files = [f for f in os.listdir(relative_directory_of_interest) if os.path.isfile(os.path.join(relative_directory_of_interest,f))]

for f in files:
    print(os.path.abspath(f))
Run Code Online (Sandbox Code Playgroud)

输出:

/ Users/2Gig/Development/feature_dev/scripts/ZWave_custom_cmd_classes(08262010).xml/Users/2Gig/Development/feature_dev/scripts/ZWave_custom_cmd_classes(09262010).xml/Users/2Gig/Development/feature_dev/scripts/ZWave_custom_cmd_classes(09262011). XML

python directory filenames file path

3
推荐指数
1
解决办法
8426
查看次数

是否有Visual Studio或Resharper击键复制到剪贴板当前行?

我看到一个键击来切断当前行,但没有什么可复制的.有人知道怎么做吗?

c# resharper visual-studio-2010

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

有没有办法知道ElementTree DOM消耗了多少内存?

假设您执行以下操作:

dom = ElementTree()
dom.parse(some_file_path)
Run Code Online (Sandbox Code Playgroud)

我想在我的过程中记录这个dom现在使用的大量内存.我不需要精确的东西,粗糙的东西会做.

我不认为我可以从源XML文件的大小派生它.我有一个500千字节的文件似乎在我的python进程的内存使用量增加约5MB后,如上例所示加载它.

我查看了ElementTree API,但没有看到任何提供此信息的API.任何人都知道在解析/加载XML文件后知道ElementTree实例使用了多少内存的方法?

python xml memory dom elementtree

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

这种模式的名称?(答案:使用双重检查锁定进行延迟初始化)

请考虑以下代码:

public class Foo
{
    private static object _lock = new object();

    public void NameDoesNotMatter()
    {
        if( SomeDataDoesNotExist() )
        {
            lock(_lock)
            {
                if( SomeDataDoesNotExist() )
                {
                    CreateSomeData();
                }
                else
                {
                    // someone else also noticed the lack of data.  We
                    // both contended for the lock.  The other guy won
                    // and created the data, so we no longer need to.
                    // But once he got out of the lock, we got in.
                    // There's nothing left to do.
                } …
Run Code Online (Sandbox Code Playgroud)

c# java design-patterns

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