相关疑难解决方法(0)

@classmethod和@staticmethod对初学者的意义?

有人可以向我解释@classmethod@staticmethodpython中的含义吗?我需要知道差异和意义.

据我所知,@classmethod告诉一个类,它是一个应该继承到子类的方法,或者......某种东西.但是,重点是什么?为什么不在不添加@classmethod或定义@staticmethod任何@定义的情况下定义类方法?

tl; dr: 我应该何时使用它们,为什么要使用它们,我应该如何使用它们?

我在C++方面非常先进,所以使用更高级的编程概念应该不是问题.如果可能的话,请随意给我一个相应的C++示例.

python oop static-methods class-method

1532
推荐指数
7
解决办法
59万
查看次数

自我的目的是什么?

selfPython 中这个词的目的是什么?我理解它指的是从该类创建的特定对象,但我不明白为什么它明确需要作为参数添加到每个函数.为了说明,在Ruby中我可以这样做:

class myClass
    def myFunc(name)
        @name = name
    end
end
Run Code Online (Sandbox Code Playgroud)

我很容易理解.但是在Python中我需要包括self:

class myClass:
    def myFunc(self, name):
        self.name = name
Run Code Online (Sandbox Code Playgroud)

谁能跟我说说这个?这不是我在(无可否认的有限)经历中遇到的事情.

python oop class self

1061
推荐指数
17
解决办法
81万
查看次数

在Python中,如何在类方法中访问"静态"类变量

如果我有以下python代码:

class Foo(object):
    bar = 1

    def bah(self):
        print(bar)

f = Foo()
f.bah()
Run Code Online (Sandbox Code Playgroud)

它抱怨

NameError: global name 'bar' is not defined
Run Code Online (Sandbox Code Playgroud)

如何bar在方法中访问类/静态变量bah

python

146
推荐指数
4
解决办法
14万
查看次数

Python中的实例变量与类变量

我有Python类,其中我在运行时只需要一个实例,因此每个类只有一次属性就足够了,而不是每个实例.如果存在多个实例(不会发生),则所有实例都应具有相同的配置.我想知道以下哪个选项会更好或更"惯用"Python.

类变量:

class MyController(Controller):

  path = "something/"
  children = [AController, BController]

  def action(self, request):
    pass
Run Code Online (Sandbox Code Playgroud)

实例变量:

class MyController(Controller):

  def __init__(self):
    self.path = "something/"
    self.children = [AController, BController]

  def action(self, request):
    pass
Run Code Online (Sandbox Code Playgroud)

python variables static class member

116
推荐指数
4
解决办法
9万
查看次数

Python初学者类变量Error

这是我的第一个问题,很抱歉......我是python和编码的初学者,我想创建一个名为'Map'的类,它将具有以下类变量:

class Map:
    height = 11  
    width = 21

    top = [['#']*width]
    middle = [['#']+[' ']*(width-2)+['#'] for i in range(height-2)]
    field = top + middle + top

b = Map()

Shell:
>>> middle = [['#']+[' ']*(width-2)+['#'] for i in range(height-2)]
    NameError: name 'width' is not defined
Run Code Online (Sandbox Code Playgroud)

如果我将变量放在类之外就可以了.我究竟做错了什么??

谢谢您的帮助.

python class class-variables python-3.x

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

如何让 Python 在多处理时尊重可迭代字段?

如果这是一个愚蠢的问题,我深表歉意,但我还没有找到解决此问题的优雅解决方法。基本上,当使用 concurent.futures 模块时,类的非静态方法看起来应该可以正常工作,我在模块的文档中没有看到任何表明它们无法正常工作的内容,并且该模块不会产生任何结果运行时出现错误 - 在许多情况下甚至会产生预期的结果!

但是,我注意到该模块似乎不尊重在父线程中进行的可迭代字段的更新,即使这些更新发生在启动任何子进程之前也是如此。这是我的意思的一个例子:

import concurrent.futures


class Thing:
    data_list = [0, 0, 0]
    data_number = 0

    def foo(self, num):
        return sum(self.data_list) * num

    def bar(self, num):
        return num * self.data_number


if __name__ == '__main__':
    thing = Thing()
    thing.data_list[0] = 1
    thing.data_number = 1

    with concurrent.futures.ProcessPoolExecutor() as executor:
        results = executor.map(thing.foo, range(3))
        print('result of changing list:')
        for result in results:
            print(result)

        results = executor.map(thing.bar, range(3))
        print('result of changing number:')
        for result in results:
            print(result)
Run Code Online (Sandbox Code Playgroud)

我希望这里的结果是

result of changing list: …
Run Code Online (Sandbox Code Playgroud)

python iterable multiprocessing non-static concurrent.futures

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