杂点总结

2019-07-18  本文已影响0人  葡萄柚子茶

1.在odoo中引用其他模型下的方法

demo = self.env['模型名']
demo.方法名(参数)

通过关联字段连接到另外一个模型

for line in self:
  line.asset_id.方法名(参数)

2.hasattr(object, name)---判断一个对象里面是否有name属性或者name方法

class Coordinate:
    x = 10
    y = -5
    z = 0
 
point1 = Coordinate() 
print(hasattr(point1, 'x'))
print(hasattr(point1, 'y'))
print(hasattr(point1, 'z'))
print(hasattr(point1, 'no'))  # 没有该属性
#True
#True
#True
#False

object -- 对象。
name -- 字符串,属性名。
如果对象有该属性返回 True,否则返回 False。

3.getattr(object, name[, default])

getattr() 函数用于返回一个对象属性值
object -- 对象。
name -- 字符串,对象属性。
default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。

class A(object):
        bar = 1

>>> a = A()
>>> getattr(a, 'bar')        # 获取属性 bar 值
1
>>> getattr(a, 'bar2')       # 属性 bar2 不存在,触发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'bar2'
>>> getattr(a, 'bar2', 3)    # 属性 bar2 不存在,但设置了默认值
3

4.setattr(object, name, value)

setattr() 函数对应函数 [getattr()],用于设置属性值,该属性不一定是存在的。

>>>class A(object):
        bar = 1

>>> a = A()
>>> getattr(a, 'bar')          # 获取属性 bar 值
1
>>> setattr(a, 'bar', 5)       # 设置属性 bar 值
>>> a.bar
5


>>>class A():
     name = "runoob"
>>> a = A()
>>> setattr(a, "age", 28)
>>> print(a.age)
28
>>>

综合运用

判断一个对象的属性是否存在,若不存在就添加该属性。

class test(): 
      name="xiaohua"
def run(self): 
       return "HelloWord"
 
t=test() 
getattr(t, "age")    #age属性不存在
>>>Traceback (most recent call last): 
File "<stdin>", line 1, in <module>
AttributeError: test instance has no attribute 'age'

getattr(t, "age", setattr(t, "age", "18")) #age属性不存在时,设置该属性
>>>'18'
getattr(t, "age")  #可检测设置成功
>>>'18'

5.写代码遇到的总结点

6.学到的知识点

命名空间是名字到对象映射的结合
MRO方法解析顺序
在对象的命名空间中找不到属性,将在类中查找属性
L(Local)E(Enclosing)G(Global)B(内置)
is --- 比较id值是否相等,是否指向同一个内存地址
== --- 比较值是否相等
= --- 赋值

上一篇 下一篇

猜你喜欢

热点阅读