推迟类属性初始化的最佳方法是什么?

天空步行者

我有以下 OO 用例:

class SomeClass(object):

    def __init__(self, arg1):
        self.attr_now = arg1
        self.attr_later = None

    def compute(self):
        # do some lengthy computation ...
        self.attr_later = x # some result
        # continue work ... 

这是延迟属性初始化的理想方法attr_later还是有更好的方法?我看到的是类型的不安全性,attr_later因为它可能会在封闭实例的生命周期内改变类型......

克里斯

由于您在谈论 OO 用例,因此我认为您必须了解可以执行哪些访问修改来保护属性的值和类型。

想想这个

class SomeClass(object):

    def __init__(self, arg1):
        self.__attr_now = arg1
        self.__attr_later = None

    @property
    def attr_later(self):
        return self.__attr_later

    def compute(self):
        # do some lengthy computation ...
        self.__attr_later = x # some result
        # continue work ... 

实例变量可以以 a__前缀,以使其成为该实例的私有变量所以你可以肯定,变量不能从外部改变。此外,property为变量创建一个,以便您可以从外部访问该值。

如果您认为,您想从外部设置值,定义一个setter并控制传入的分配 - 类似于

@attr_later.setter
def attr_later(self, attr_val):
    if isinstance(attr_val,str):
        self.__attr_later = attr_val
    else:
        raise 
        # or do damage control

如果您正确封装了属性,您就可以控制您的实例。希望这是有道理的

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

成员变量的初始化必须推迟。该课程的最佳设计选择是什么?

来自分类Python

在Python中初始化dict的最佳方法是什么?

来自分类Java

初始化Quartz的最佳方法是什么?

来自分类Java

初始化bean的最佳方法是什么?

来自分类Dev

进行昂贵的初始化的最佳方法是什么?

来自分类Dev

在TensorFlow中初始化变量的最佳方法是什么?

来自分类Dev

初始化数组“ memset”或“ {// value}”的最佳方法是什么?

来自分类Dev

使用方法初始化类属性

来自分类Dev

在类属性中引用类名称的最佳方法是什么?

来自分类Dev

在 wpf 中搜索类属性的最佳方法是什么?

来自分类Dev

初始化对象时传递方法的最佳方法是什么

来自分类Dev

Python类属性及其初始化

来自分类Dev

Typescript类属性的初始化顺序

来自分类Dev

在 Swift 中初始化类属性

来自分类Dev

基类属性的不同初始化

来自分类Dev

延迟类属性初始化

来自分类Dev

初始化类属性Python

来自分类Dev

Typescript类属性未初始化

来自分类Dev

在Ada中初始化固定长度字符串的最佳方法是什么?

来自分类Java

在班级中初始化记录器的最佳方法是什么?

来自分类Java

使用Arrays.asList()初始化列表的最佳方法是什么

来自分类Dev

在类中初始化以下实例的最佳方法是什么?

来自分类Dev

初始化我想跨多个线程共享的静态对象的最佳方法是什么

来自分类Python

跨Python类初始化和使用常量的最佳方法是什么?

来自分类Dev

初始化值为std :: vector的std :: map的最佳方法是什么?

来自分类Dev

测试类静态初始化程序的最佳方法是什么?

来自分类Dev

从初始化列表填充boost :: multi_array的最佳方法是什么?

来自分类Dev

在Vue项目中包括或初始化jQuery库的最佳方法是什么?

来自分类Dev

使用Nuxt.js时,动态Vuex模块初始化的最佳方法是什么?

Related 相关文章

  1. 1

    成员变量的初始化必须推迟。该课程的最佳设计选择是什么?

  2. 2

    在Python中初始化dict的最佳方法是什么?

  3. 3

    初始化Quartz的最佳方法是什么?

  4. 4

    初始化bean的最佳方法是什么?

  5. 5

    进行昂贵的初始化的最佳方法是什么?

  6. 6

    在TensorFlow中初始化变量的最佳方法是什么?

  7. 7

    初始化数组“ memset”或“ {// value}”的最佳方法是什么?

  8. 8

    使用方法初始化类属性

  9. 9

    在类属性中引用类名称的最佳方法是什么?

  10. 10

    在 wpf 中搜索类属性的最佳方法是什么?

  11. 11

    初始化对象时传递方法的最佳方法是什么

  12. 12

    Python类属性及其初始化

  13. 13

    Typescript类属性的初始化顺序

  14. 14

    在 Swift 中初始化类属性

  15. 15

    基类属性的不同初始化

  16. 16

    延迟类属性初始化

  17. 17

    初始化类属性Python

  18. 18

    Typescript类属性未初始化

  19. 19

    在Ada中初始化固定长度字符串的最佳方法是什么?

  20. 20

    在班级中初始化记录器的最佳方法是什么?

  21. 21

    使用Arrays.asList()初始化列表的最佳方法是什么

  22. 22

    在类中初始化以下实例的最佳方法是什么?

  23. 23

    初始化我想跨多个线程共享的静态对象的最佳方法是什么

  24. 24

    跨Python类初始化和使用常量的最佳方法是什么?

  25. 25

    初始化值为std :: vector的std :: map的最佳方法是什么?

  26. 26

    测试类静态初始化程序的最佳方法是什么?

  27. 27

    从初始化列表填充boost :: multi_array的最佳方法是什么?

  28. 28

    在Vue项目中包括或初始化jQuery库的最佳方法是什么?

  29. 29

    使用Nuxt.js时,动态Vuex模块初始化的最佳方法是什么?

热门标签

归档