相关疑难解决方法(0)

@property装饰器如何工作?

我想了解内置函数的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

889
推荐指数
12
解决办法
46万
查看次数

是否可以在Enum中定义类常量?

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)

python enums constants class-constants python-3.x

50
推荐指数
4
解决办法
8767
查看次数

Python属性返回属性对象

我有一个这样的课:

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 python-2.7

6
推荐指数
4
解决办法
1万
查看次数

以属性装饰器的下划线开头的变量

我是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)

这打印出我同意的第一个名字,我没有覆盖printgetattribute方法.此外,这里没有房产.这是为了测试基本代码是否有效.

让我们修改代码来添加属性:

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中编写上面的代码,我就会得到一个黄色的灯泡图标,说明该变量必须是私有的.我不明白其理由.

忽略上面,如果我运行上面的代码,我得到:

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
Run Code Online (Sandbox Code Playgroud)

现在,我研究了这个主题,我发现有两个修复(不知道为什么会这样):

修复#1: 将变量更改name_name

class …
Run Code Online (Sandbox Code Playgroud)

python properties decorator python-3.x python-decorators

6
推荐指数
1
解决办法
615
查看次数

如何在 Python 中获取 &lt;property object at 0x...&gt; 的值

我是 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)

该对象上的其他属性也是如此。如何访问数值?

python astropy

5
推荐指数
1
解决办法
1万
查看次数

将 DataArray 转换为 numpy 数组

我有一个 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)

python numpy python-xarray

4
推荐指数
1
解决办法
1万
查看次数

可变的名字元组?

假设我有:

from collections import namedtuple
NT = namedtuple('name', ['x'])
Run Code Online (Sandbox Code Playgroud)

有人可以解释之间的区别:

  1. NT.x = 3
  2. var = NT(x=3)

我可以改变NT.x任何东西(可变)但是var.x是不可改变的.为什么会这样?

python namedtuple

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