【发布时间】:2021-06-11 04:17:27
【问题描述】:
让我们考虑两个实现:
class A:
def __init__(self, myvar):
self._myvar = myvar #
@property
def myvar(self):
print("GET")
return self._myvar
@myvar.setter
def myvar(self, newvar):
print("SET")
self._myvar = newvar
和
class B:
def __init__(self, myvar):
self.myvar = myvar
@property
def myvar(self):
print("GET")
return self._myvar
@myvar.setter
def myvar(self, newvar):
print("SET")
self._myvar = newvar
唯一的区别在于__init__,我们在 A 类中初始化了 _myvar,在 B 类中初始化了 myvar
a = A(myvar=5)
print(a.myvar)
会输出
GET
5
和
b = B(myvar=5)
print(b.myvar)
会输出
SET
GET
5
总而言之,据我了解,这两种实现方式的唯一区别在于 init. A 类的实例将直接设置 _myvar,而 B 类的实例将通过 myvar.setter 设置 _myvar。 所以我的问题如下: 哪个实现被认为更 Pythonic?有理由使用其中一个吗?
【问题讨论】:
标签: python properties decorator python-internals