python - 在 python 类中使用不同类型变量的指南?

标签 python oop

我花了一些时间寻找有关如何决定如何在 Python 类中存储数据和函数的指南。我应该指出我是 OOP 的新手,所以回答如下:

data attributes correspond to “instance variables” in Smalltalk, and to “data members” in C++. (as seen in http://docs.python.org/tutorial/classes.html

让我摸不着头脑。我想我想要的是针对 python 程序员的 OOP 入门。我希望指南/入门书也包含某种词汇表或定义,这样在阅读之后我就能够聪明地谈论可用的不同类型的变量。我想了解决定何时使用 abcd 形式背后的思维过程> 在下面的代码中。

class MyClass(object):
    a = 0

    def __init__(self):
        b = 0
        self.c = 0
        self.__d = 0

    def __getd(self):
        return self.__d

    d = property(__getd, None, None, None)

最佳答案

abc 显示变量的不同范围。这意味着,这些变量具有不同的可见性和有效环境。

首先,您需要了解类和对象之间的区别。类是描述某些通用行为的工具。然后基于该类创建一个对象。对象“继承”了类的所有方法,并且可以定义绑定(bind)到对象的变量。这个想法是对象封装了一些数据和处理该数据所需的行为。这是与过程式编程的主要区别,在过程式编程中,模块只定义行为,而不定义数据。

c 现在就是这样一个实例变量,意思是一个存在于 MyClass 实例范围内的变量。 self 始终是对运行当前代码的当前对象实例的引用。从技术上讲,__dc 的工作方式相同,并且具有相同的作用域。这里的区别在于,Python 中的约定是,以两个下划线开头的变量和方法被认为是私有(private)的,不会被类外的代码使用。这是必需的,因为 Python 无法像许多其他语言那样定义真正的私有(private) protected 方法和变量。

b 是一个简单的变量,它只在 __init__ 方法中有效。如果执行离开 __init__ 方法,则 b 变量将被垃圾收集,并且在 c__d 时不再可访问 仍然有效。请注意,b 没有以 self 为前缀。

现在 a 是直接在类上定义的。这使它成为所谓的类变量。通常,它用于存储静态数据。此变量在 MyClass 类的所有实例上都是相同的。

请注意,此描述有点简化,并省略了元类以及函数和绑定(bind)方法之间的区别等内容,但您明白了......

关于python - 在 python 类中使用不同类型变量的指南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7381095/

相关文章:

python - Python 中 PCA 图中的项目变量

python - 用递归找出一对中的目标差异

python - 计算字符串中的字符串

c# - 复制和克隆有什么区别?

django - 使 Django 模型中的 transient (非数据库)属性可用于模板

java - 在Java中如何使用接受其父类的单个函数处理所有子类

python - Python-如何正确终止threading.Timer类?

python - Python 3.4 中的包装函数缺少必需的位置参数

java - 如果接口(interface)只声明了方法签名,为什么我们还需要接口(interface)呢?

java - 复合对象如何与父对象通信?