我花了一些时间寻找有关如何决定如何在 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 入门。我希望指南/入门书也包含某种词汇表或定义,这样在阅读之后我就能够聪明地谈论可用的不同类型的变量。我想了解决定何时使用 a
、b
、c
和 d
形式背后的思维过程> 在下面的代码中。
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)
最佳答案
a
、b
和 c
显示变量的不同范围。这意味着,这些变量具有不同的可见性和有效环境。
首先,您需要了解类和对象之间的区别。类是描述某些通用行为的工具。然后基于该类创建一个对象。对象“继承”了类的所有方法,并且可以定义绑定(bind)到对象的变量。这个想法是对象封装了一些数据和处理该数据所需的行为。这是与过程式编程的主要区别,在过程式编程中,模块只定义行为,而不定义数据。
c
现在就是这样一个实例变量,意思是一个存在于 MyClass
实例范围内的变量。 self
始终是对运行当前代码的当前对象实例的引用。从技术上讲,__d
与 c
的工作方式相同,并且具有相同的作用域。这里的区别在于,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/