Effective Python

Leonhardt 2021-12-16 Python
  • Python
Less than 1 minute

# 用@property替代getter, setter写法

  • 用@property修饰的方法可以当做属性使用,被修饰的方法可看作属性的getter方法。
  • 用@attr.setter修饰的方法为属性的setter方法。
class A:

    def __init__(self) -> None:
        self._grade = 0

    @property
    def grade(self):
        print('getter triggered')
        return self._grade
    
    @grade.setter
    def grade(self, val):
        self._grade = val
        print('setter triggered')
    
if __name__ == '__main__':
    a = A()
    a.grade = 5
    print(a.grade)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 字典转对象

python读取json等数据时,会返回字典。因为python的字典不能用点操作符来访问,只能用[key]来访问,如果key是字符串,又嵌套了很多层,取内层值的时候很麻烦。因此希望将字典转换为对象,使用点操作符来访问。

class DictObj():

    def __init__(self, in_dict):
        for k, v in in_dict.items():
            if isinstance(v, (list, tuple)):
                setattr(self, k, [DictObj(x) if isinstance(x, dict) else x for x in v])
            else:
                setattr(self, k, DictObj(v) if isinstance(v, dict) else v)
1
2
3
4
5
6
7
8
Last update: April 2, 2022 16:34