如何在 python 3.x 中的相同 class 的命名空间中调用 class 方法

How to call class method within namespace of the same class in python 3.x

使用 python 个实例时,可以使用 self 访问相同 class 的绑定方法。这解析为对应于层次结构中相同 class 的方法。

class A:
    def f(self):
        return 1

    def __init__(self):
        self.v = self.f()

class B(A):
    def f(self):
        return 2

b = B()
# b.v is set to 2

但是,在使用 class 方法时,没有明显的方法可以访问与上面相同的 class 方法。

在我的用例中,上面的f需要一个class方法,我需要根据f对应设置class变量v相同 class。有点像:

class A:
    @classmethod
    def f(cls):
        return 1

    v = resolution_of_calling_class.f()

class B(A):
    @classmethod
    def f(cls):
        return 2

# B.v should be 2

编辑v其实是parentclass定义的一个属性,应该找一个childclass[=重写的方法21=]

我不是 100% 确定我明白你想做什么。

我在上面使用了你的代码并且

class A:
    @classmethod
    def f(cls):
        return 1

class B:
    @classmethod
    def f(cls):
        return 2

print(B.f())

给我 2 就像我预期的那样。 B 是否应该像第一个示例中那样是 A 的 child class?

您只需要覆盖 __new__ 方法,因为它在 __init__ 之前被调用,其目的是创建一个实例,该实例将由 __init__ 初始化。

class A:

    def __new__(cls, *args, **kwargs):
        cls.v = cls.f()
        return super().__new__(cls, *args, **kwargs)

    @classmethod
    def f(cls):
        return 1


class B(A):
    @classmethod
    def f(cls):
        return 2


a = A()
print(a.v)

b = B()
print(b.v)
1
2