2

我有这个代码:

class X(object):
    x = 10
    def test_x(self):
        return self.x

class Y(X):
    def test_y(self):
        return self.x

y = Y()
y.test_y()      # works fine

但是当我使用 type 构造一个基于 X 的新对象 z 时:

z = type('Z', (X,), dict(z=1))
z.x             # works fine
z.test_x()      # gives a TypeError : 

必须使用 Z 实例作为第一个参数调用未绑定的方法 test_x()(什么都没有)。我该如何解决。

更新

在 Martijn 的帮助和理解下,我解决了这个问题:

z = type('Z', (X,), dict(z=1))()
z.test_x() 
4

1 回答 1

5

z是一个类,而不是一个实例。而是创建一个实例:

z().test_x()

你所做的相当于:

class Z(X):
    z = 1

z = Z
z.test_x()
于 2012-11-30T15:40:10.787 回答