1

基本クラスから拡張された多数のクラスを持つ python パッケージ (回路図) をインストールしました。

class BaseType(object):
    def __init__(self, required=False, default=None ...)
    ...

class StringType(BaseType):
    ...

class IntType(BaseType):
    ...

BaseType クラスを変更できるようにしたいので、追加のコンストラクター変数を受け入れます。

これらに基づいて独自のクラスを定義できることは知っていますが、実際にPythonで基本クラスだけを変更する方法があるかどうか疑問に思っていましたか?

ありがとう、ベン

4

2 に答える 2

2

もちろんできます。するだけですBaseClass.__init__ = your_new_initBaseClassただし、が実装されている場合、これは機能しませんC(また、C で実装されたクラスの特別なメソッドを確実に変更することはできないと思います。これは C で自分で記述できます)。

あなたがやりたいことは大規模なハックであり、それは問題を引き起こすだけだと私は信じてます__init__.

例:

In [16]: class BaseClass(object):
    ...:     def __init__(self, a, b):
    ...:         self.a = a
    ...:         self.b = b
    ...:         

In [17]: class A(BaseClass): pass

In [18]: class B(BaseClass): pass

In [19]: BaseClass.old_init = BaseClass.__init__ #save old init if you plan to use it 

In [21]: def new_init(self, a, b, c):
    ...:     # calling __init__ would cause infinite recursion!
    ...:     BaseClass.old_init(self, a, b)
    ...:     self.c = c

In [22]: BaseClass.__init__ = new_init

In [23]: A(1, 2)   # triggers the new BaseClass.__init__ method
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-23-09f95d33d46f> in <module>()
----> 1 A(1, 2)

TypeError: new_init() missing 1 required positional argument: 'c'

In [24]: A(1, 2, 3)
Out[24]: <__main__.A at 0x7fd5f29f0810>

In [25]: import numpy as np

In [26]: np.ndarray.__init__ = lambda self: 1   # doesn't work as expected
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-26-d743f6b514fa> in <module>()
----> 1 np.ndarray.__init__ = lambda self: 1

TypeError: can't set attributes of built-in/extension type 'numpy.ndarray'
于 2013-08-16T10:02:48.140 に答える
0

おそらく、基本クラスが定義されているソースファイルを編集するか、パッケージのコピーを作成して、特定のプロジェクトのソースを編集できます。

参照: Python サイトパッケージ ディレクトリの場所を見つけるにはどうすればよいですか?

于 2013-08-16T10:03:59.337 に答える