我想了解内置函数的property工作原理.令我困惑的是,property它也可以用作装饰器,但它只在用作内置函数时才需要参数,而不是用作装饰器时.
这个例子来自文档:
class C(object):
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
Run Code Online (Sandbox Code Playgroud)
property的论点是getx,setx,delx和文档字符串.
在下面的代码中property用作装饰器.它的对象是x函数,但在上面的代码中,参数中没有对象函数的位置.
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
Run Code Online (Sandbox Code Playgroud)
而且,如何在 …
python properties decorator python-internals python-decorators
Python 3.4引入了一个新模块enum,它为该语言添加了枚举类型.该文档enum.Enum提供了一个示例来演示如何扩展它:
>>> class Planet(Enum):
... MERCURY = (3.303e+23, 2.4397e6)
... VENUS = (4.869e+24, 6.0518e6)
... EARTH = (5.976e+24, 6.37814e6)
... MARS = (6.421e+23, 3.3972e6)
... JUPITER = (1.9e+27, 7.1492e7)
... SATURN = (5.688e+26, 6.0268e7)
... URANUS = (8.686e+25, 2.5559e7)
... NEPTUNE = (1.024e+26, 2.4746e7)
... def __init__(self, mass, radius):
... self.mass = mass # in kilograms
... self.radius = radius # in meters
... @property
... def surface_gravity(self):
... # universal …Run Code Online (Sandbox Code Playgroud) 我有一个这样的课:
class Foo(object):
def __init__(self):
self.bar = property(self.get_bar)
def get_bar(self):
return "bar"
print Foo().bar #this prints <property object at 0x0051CB40>
Run Code Online (Sandbox Code Playgroud)
我已经看过Python属性如何工作?,如何在__init__中设置python属性,但它们都使用装饰器方法,我没有,因为我想要一个不同的名称.我需要访问self
我如何让财产表现出来?
我是Python的新手.所以,如果这是一个基本问题,请原谅我.我在互联网和SO上研究过这个话题,但我找不到解释.我正在使用Anaconda 3.6发行版.
我正在尝试为属性创建一个简单的getter和setter.我将引导你完成我得到的错误.
class Person:
def __init__(self,name):
self.name=name
bob = Person('Bob Smith')
print(bob.name)
Run Code Online (Sandbox Code Playgroud)
这打印出我同意的第一个名字,我没有覆盖print或getattribute方法.此外,这里没有房产.这是为了测试基本代码是否有效.
让我们修改代码来添加属性:
class Person:
def __init__(self,name):
self.name=name
@property
def name(self):
"name property docs"
print('fetch...')
return self.name
bob = Person('Bob Smith')
print(bob.name)
Run Code Online (Sandbox Code Playgroud)
一旦我在PyCharm中编写上面的代码,我就会得到一个黄色的灯泡图标,说明该变量必须是私有的.我不明白其理由.
忽略上面,如果我运行上面的代码,我得到:
Run Code Online (Sandbox Code Playgroud)Traceback (most recent call last): File "C:\..., in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-25-62e9a426d2a9>", line 2, in <module> bob = Person('Bob Smith') File "<ipython-input-24-6c55f4b7326f>", line 4, in __init__ self.name=name AttributeError: can't set attribute
现在,我研究了这个主题,我发现有两个修复(不知道为什么会这样):
修复#1: 将变量更改name为_name
class …Run Code Online (Sandbox Code Playgroud) 我是 Python 新手并在 Windows 上使用 Python 2.7 我正在使用 Astropy 库,但是当我想查看以下类的属性时:
>>> astropy.cosmology.FlatLambdaCDM.Ok0
Run Code Online (Sandbox Code Playgroud)
它返回:
<property object at 0x7fa2c7e206d8>
Run Code Online (Sandbox Code Playgroud)
该对象上的其他属性也是如此。如何访问数值?
我有一个 DataArray,我想将其转换为 numpy 数组。作为参考,它是一个包含(时间、纬度、经度)的三维网格数据集。我尝试使用 xarray.DataArray.values(),但收到错误: TypeError: 'property' object is not callable。
我想将其转换为 numpy 数组,因为我使用的函数利用了重塑功能,并且无法与 DataArray 一起正常工作。我尝试使用 np.array() 将其简单地转换为 numpy 数组,但它会将每个值转换为 NaN。
datatlt=xr.open_dataset("/nfs/home11/staff/lzhou/Public/Satellite_data/RSS_Tb_Anom_Maps_ch_TLT_V4_0.nc", decode_times=False)
tlt=datatlt['brightness_temperature'].sel(months=slice(121,492))
tlt2=np.ma.masked_invalid(tlt)
tlt2=xr.DataArray.values(tlt2)
Run Code Online (Sandbox Code Playgroud) 假设我有:
from collections import namedtuple
NT = namedtuple('name', ['x'])
Run Code Online (Sandbox Code Playgroud)
有人可以解释之间的区别:
NT.x = 3 var = NT(x=3) 我可以改变NT.x任何东西(可变)但是var.x是不可改变的.为什么会这样?
python ×7
decorator ×2
properties ×2
python-3.x ×2
astropy ×1
constants ×1
enums ×1
namedtuple ×1
numpy ×1
python-2.7 ×1