我需要列出一个类的所有属性,这些属性是属性并且有一个 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)
提前致谢。
我最近开始使用三元运算符,但我遇到了一个案例,我需要在同一行中使用多个三元运算符,但它们似乎没有像我预期的那样工作.
有人可以解释为什么这些线给出不同的结果.
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)
是因为你不应该在同一行中有多个三元运算符,还是他们的另一个原因?
我有以下课程:
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?