0

例えば:

>>> ctypes.c_char * 2
<type '_ctypes.SimpleType'>

型は のメソッドc_char_Array_2によってオンザフライで作成されます ,それがどのように行われたか知りたいのですが、メソッドに関するソース コードが見つかりません。誰か助けてもらえますか?__mul__()_ctypes._SimpleCData__mul__()

4

1 に答える 1

2

のCソース実装を確認したい場合は、ここでctypes見つけることができます。はCで実装されているため、どのファイルにも実装はありません。ctypes__mul__.py

Pythonでこのようなことを行うには、メタクラスを使用します。
簡単な例:

class Spam(type):
    def spam(cls): print("spam:", cls.__name__)
    def __mul__(self, other):
        ' create a new class on the fly and return it '
        class Eggs(metaclass=Spam):
            def eggs(self): print("eggs" * other)
        return Eggs

class Ham(metaclass=Spam):
    def ham(self): print('ham')

print(Ham)                 # <class '__main__.Eggs'>
Ham.spam()                 # spam: Ham
Ham().ham()                # ham
# create new class:
TwoEggs = Ham * 2
print(TwoEggs)             # <class '__main__.Eggs'>
TwoEggs.spam()             # spam: Eggs
TwoEggs().eggs()           # eggseggs

(pyhton3構文、python2は引数__metaclass__の代わりに属性を使用しますmetaclass。)

于 2012-12-10T19:25:17.647 に答える