x=1
class Test: x = 1
def __init__(self): self.y = 2
def create():
j=1
x即为类Test的变量,各个Test的实例中的x都是一样的,而y为Test的属性,每个Test实例的y都是独立的。
类中的变量:
a.全局变量:在模块内,在所有函数外又在class外面,就是全局变量。就如class 外的x
b.局部变量:在函数内,在函数内或在class的方法内(未用self修饰的),这是局部变量。在上面就是变量j
c.静态变量:在class内,但是不在class的方内。就是上面的class中的x
d.实例变量:在class的方法内,用self修饰过的,就是self.y
类和对象的命名空间
这里需要简单了解一下python的命名空间。
python中,命名空间是名字到对象映射的结合,不同命名空间中的名字是没有关联的。这种映射的实现有点类似于python中的字典
根据上下文的不同,可以通过"."或者是直接访问到命名空间中的名字。举个例子
class MyClass(object): # 在类的命名空间内,不需要用"."访问 class_var = 1 def __init__(self, i_var): self.i_var = i_var ## 不在类的命名空间内,需要用"."访问 MyClass.class_var ## 1
python中,类和对象都有自己的命名空间,可以通过MyClass.__dict__是输出类的数据属性和函数属性(以字典的形式)
a = MyClass(3)
a.__dict__
是输出对象的属性 。
关键点:类无法访问对象实例的属性,但对象可以访问类属性(类变量)
关于初始化__init__()方法:
1.先产生一个空对象
2.类调用__init(空对象,参数)
在python3中:一切皆对象
l1=[1,2,3] l1.append(4) print(l1) l=list([3,4,5,6]) l.append(11) print(l)
结果:
[1, 2, 3, 4] [3, 4, 5, 6, 11]
l1直接定义,默认append方法。而按照实例的模式list()。对象l也默认append方法。
print(list)
print(type([1,3]))
结果:
<class 'list'>
<class 'list'>