【发布时间】:2020-06-27 14:20:24
【问题描述】:
假设我们有这个简单的 Python 代码
class MyClass(object):
class_var = 1
def __init__(self, i_var):
self.i_var = i_var
如果我有任何错误,请纠正我:
Class_Var 是一个类变量,对于 MyClass 对象的所有实例都是相同的。 I_Var 是一个实例变量,只存在于 MyClass 对象的实例中
foo = MyClass(2)
bar = MyClass(3)
foo.class_var, foo.i_var
## 1, 2
bar.class_var, bar.i_var
## 1, 3
类变量也是类本身的属性。
MyClass.class_var ##
## 1
MyClass.I_var 应该会出错,对吗?
这是否意味着类变量可以被视为类对象本身的实例变量(因为所有类都是对象)?
MyClass.new_attribute = 'foo'
print(hasattr(ObjectCreator, 'new_attribute'))
这应该返回 true。还有
print (MyClass.new_attribute)
应该返回 foo。
为什么我们可以创建一个未在该类的原始定义中定义的新类变量?
是
MyClass.new_attribute = 'foo'
与在原始定义中创建该类属性完全相同吗?
class MyClass(object):
class_var = 1
new_attribute = 'foo'
所以我们可以在运行时创建新的类属性?这如何不干扰创建类对象并将这些类变量作为类对象的实例变量的 init 构造函数?
【问题讨论】:
-
没错。
class对象是type的一个实例,type被称为MyClass的元类。
标签: python class instance-variables class-variables