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.写代码遇到的总结点
- 写修改方法时要判断第一个数字是不是1
- 代码写注释
- get('',False)
- 首先要先判断值是否存在
- 字段可以重写,实现功能
- 不能根据自己字段的值应用readonly,必须是a字段可读是因为b字段,不能根据a字段来设置
6.学到的知识点
命名空间是名字到对象映射的结合
MRO方法解析顺序
在对象的命名空间中找不到属性,将在类中查找属性
L(Local)E(Enclosing)G(Global)B(内置)
is --- 比较id值是否相等,是否指向同一个内存地址
== --- 比较值是否相等
= --- 赋值
网友评论