【发布时间】:2018-09-02 13:34:46
【问题描述】:
在 Python 中方法重载是不可能的!
你能解释一下为什么Python中的Properties.setter不是方法重载的情况吗?
class newOne():
def __init__(self):
self.__x = 0
@property
def val(self):
return self.__x
@val.setter
def val(self,value):
self.__x = value
在上面的代码中,我有两个具有相同名称“val”(但参数集不同)的方法,它们的行为不同。
【问题讨论】:
-
你明白属性是描述符吗?这意味着什么?我不打算解释这一点,这是理解其余部分所必需的知识。但基本上,属性有点神奇,这是一种特殊情况,这里没有实际的方法重载。该类只有一个
val属性。 -
class A:def f(): print(1); def f(): print(2); A().f() -> prints 2。第二个定义实际上覆盖了第一个。然而val.setter实际上是将函数定义组合到property对象中,因此第一个定义实际上并没有“丢失”。然后描述符开始发挥作用。
标签: python properties