相关疑难解决方法(0)

函数,未绑定方法和绑定方法有什么区别?

我问这个问题是因为对这个答案的评论主题进行了讨论.我90%的方式来绕过它.

In [1]: class A(object):  # class named 'A'
   ...:     def f1(self): pass
   ...:
In [2]: a = A()  # an instance
Run Code Online (Sandbox Code Playgroud)

f1 存在三种不同的形式:

In [3]: a.f1  # a bound method
Out[3]: <bound method a.f1 of <__main__.A object at 0x039BE870>>
In [4]: A.f1  # an unbound method
Out[4]: <unbound method A.f1>
In [5]: a.__dict__['f1']  # doesn't exist
KeyError: 'f1'
In [6]: A.__dict__['f1']  # a function
Out[6]: <function __main__.f1>
Run Code Online (Sandbox Code Playgroud)

绑定方法,未绑定方法函数对象之间的区别是什么,所有这些都由f1描述?如何调用这三个对象?他们怎么能相互转化?关于这些东西的文档很难理解.

python oop methods function

57
推荐指数
2
解决办法
2万
查看次数

是否真的"然而,当首次定义类时,这组方法是固定的"?

来自编程语言语用学,Scott

对于类的内容(成员),Python和Ruby都比PHP或更传统的面向对象语言更灵活.只需分配给Python对象,就可以将新字段添加到Python对象中:my_object.new_field = value.但是,在首次定义类时,这组方法是固定的.在Ruby中,只有方法在类外可见("put"和"get"方法必须用于访问字段),并且必须显式声明所有方法.但是,可以修改现有的类声明,添加或覆盖方法.甚至可以在逐个对象的基础上执行此操作.因此,同一类的两个对象可能不会显示相同的行为.

然而,"当首次定义类时,这组方法是否已修复"是什么意思?

我似乎找到了一个反例:

>>> class E:
...     pass
... 
>>> E.__dict__
mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'E' objects>, '__doc__': None, '__weakref__': <attribute '__weakref__' of 'E' objects>})
>>> def myfun():
...     pass
... 
>>> E.mf=myfun
>>> E.__dict__
mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'E' objects>, '__doc__': None, '__weakref__': <attribute '__weakref__' of 'E' objects>, 'mf': <function myfun at 0x7f6561daba60>})
Run Code Online (Sandbox Code Playgroud)

python methods class python-3.x

10
推荐指数
1
解决办法
233
查看次数

标签 统计

methods ×2

python ×2

class ×1

function ×1

oop ×1

python-3.x ×1