例如:
>>> ctypes.c_char * 2
<type '_ctypes.SimpleType'>
类型c_char_Array_2
是由__mul__()
中的_ctypes._SimpleCData
方法动态创建的,我想知道它是如何做到的,但我找不到任何关于__mul__()
方法,有人可以帮忙吗?
答案 0 :(得分:2)
如果您想查看ctypes
的C源代码实现,可以找到它here。 ctypes
是在C中实现的,因此您无法在任何__mul__
文件中找到.py
的实现。
使用metaclassing可以在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
参数。)