Python默认/未命名方法
是否可以创建具有以下属性的python对象:Python默认/未命名方法,python,class,object,Python,Class,Object,是否可以创建具有以下属性的python对象: class Foo: def __default_method__(x): return x f = Foo() f(10) > 10 也就是说,一个对象在实例化时允许调用一个方法,而不需要显式的方法名?是。它叫。正如凯文在回答中指出的那样,\uu call\uuuu就是你要找的 事实上,每次创建类对象时,您都在使用一个可调用类(类的元类),而没有意识到它 通常我们这样上课: class C(object): a =
class Foo:
def __default_method__(x):
return x
f = Foo()
f(10)
> 10
也就是说,一个对象在实例化时允许调用一个方法,而不需要显式的方法名?是。它叫。正如凯文在回答中指出的那样,
\uu call\uuuu
就是你要找的
事实上,每次创建类对象时,您都在使用一个可调用类(类的元类),而没有意识到它
通常我们这样上课:
class C(object):
a = 1
C = type('C',(object,),{'a':1})
但您也可以这样创建一个类:
class C(object):
a = 1
C = type('C',(object,),{'a':1})
type
类是所有Python类的元类。类C
是类型的一个实例。现在,当您使用C()
实例化C
类型的对象时,实际上是调用type
类
通过使用自己的元类替换类型
,您可以看到这一点:
class MyMeta(type):
def __call__(self):
print("MyMeta has been called!")
super().__call__()
class C(object, metaclass = MyMeta):
pass
c = C() # C() is a CALL to the class of C, which is MyMeta
> My Meta has been called!
在Python中,我们通常不使用术语“函子”,因为在Python中,函数是第一类的,所以函子模式是搜索问题的解决方案。相反,我们谈论的是对象是否为。