小编Yas*_*ris的帖子

检查类属性是否有 setter

我需要列出一个类的所有属性,这些属性是属性并且有一个 setter。例如这个类:

class MyClass(object):
    def __init__(self):
        self. a = 1
        self._b = 2
        self._c = 3

    @property
    def b(self):
        return self._b

    @property
    def c(self):
        return self._c

    @c.setter
    def c(self, value):
        self._c = value
Run Code Online (Sandbox Code Playgroud)

我需要获取属性 c 而不是 a 和 b。使用这个答案:https : //stackoverflow.com/a/5876258/7529716 我可以获得属性对象 b 和 c。

但是他们是一种知道这些属性是否有除尝试之外的 setter 的方法:

inst = MyClass()    
try:
    prev = inst.b
    inst.b = None
except AttributeError:
    pass # No setter
finally:
    inst.b = prev  
Run Code Online (Sandbox Code Playgroud)

提前致谢。

python properties python-2.7

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

三元运算符行为

我最近开始使用三元运算符,但我遇到了一个案例,我需要在同一行中使用多个三元运算符,但它们似乎没有像我预期的那样工作.

有人可以解释为什么这些线给出不同的结果.

x = 1 if True else 2 + 3 if False else 4  # x = 1, I expected 5
x = (1 if True else 2) + (3 if False else 4)  # x = 5
Run Code Online (Sandbox Code Playgroud)

如果我添加括号,我会得到预期的结果,但我不明白括号的变化.

如果我旋转添加,没有括号,我得到正确的值.

3 if False else 4 + 1 if True else 2  # x = 5
Run Code Online (Sandbox Code Playgroud)

但是,如果第二个三元运算符为False,则会得到错误的结果:

3 if False else 4 + 1 if False else 2  # x = 5 # x = 2 ???
Run Code Online (Sandbox Code Playgroud)

是因为你不应该在同一行中有多个三元运算符,还是他们的另一个原因?

python ternary-operator

4
推荐指数
2
解决办法
189
查看次数

如何将类属性转换为整数

我有以下课程:

class temp_con():
    def __init__(self):
        self.t = 0
    @property
    def t(self):
        return self.t
    @t.setter
    def t(self,value):
        self.t = value
Run Code Online (Sandbox Code Playgroud)

我需要使用它来比较遵循这个逻辑的数字:

if num <= temp_con.t - 2:
    #dothing
Run Code Online (Sandbox Code Playgroud)

但是我得到错误:

输入错误:不支持的操作数类型 - :'property'和'int'<

我试过了int(temp_con.t),getattr(temp_con, t)但那些没用.

我如何将该属性用作int?

python properties class

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

标签 统计

python ×3

properties ×2

class ×1

python-2.7 ×1

ternary-operator ×1