python面向对象——类成员的案例分析

  介绍

这篇文章将为大家详细讲解有关python面向对象——类成员的案例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

python是一个面向对象的语言,但是因为python语言的特性,我们大多的python程序员只是把它当做一个工具,在我们项目的实际使用中除了使用Django框架以外,其他的都是使用python最基础的方式,完全跟神谕的没有一点关系,当然主要还是因为我们能力太差。面向对象是书写各种框架的基础,python的面向对象不仅拥有通用面向对象的特性,而且还拥有一些极其强大的特性,可以让我们把它的便利性发挥到极致。本篇将详细介绍python类的成员,成员修饰符,类的特殊成员。

类的成员

类的成员可以分为三个方面:字段,方法和属性。

在定义一个类以后,方法,属性和静态字段都是属于类的,在内存中只保存一份,只有普通字段是属于类对象的,每个类对象都会创建并保存一份。

我们可以将存储区分为几种:程序存储区,全局存储区、静态存储区,栈存储区。

程序存储区:我们所有的普通函数、类函数、类等程序所存储的位置。

全局存储区:所有全局变量的存储区。

静态存储区:类的静态变量存储区。

栈存储区:栈存储区就是局部变量存储,所有的局部变量,类对象等都存储在这里。

字段

字段包括:普通字段和静态字段,使用和定义都是不一样的,其最本质的区别就是内存中保存的位置不同。

普通字段属于对象

静态字段属于类

class 演示:   ,,,aa =,“我是静态字段“   ,,,def  __init__(自我,,名字):   ,,,,,,,self.bb =, name ,,, def  custom_func(自我,,名字):   ,,,,,,,self.cc =,名字 obj1 =,演示(11)   时间=Demo.aa  111111 obj1.aa =, 1 obj1.custom_func (1111)   obj2 =,演示(22)   时间=obj2.aa  2 demo.aa =, 222222 obj2.custom_func (2222)      打印(“obj1.aa =,,,, obj1.aa)   打印(“obj1.bb =,,,, obj1.bb)   打印(“obj1.cc =,,,, obj1.cc)   打印(“Demo.aa =,,,, Demo.aa)      打印(“obj2.aa =,,,, obj2.aa)   打印(“obj2.bb =,,,, obj2.bb)   打印(“obj2.cc =,,,, obj2.cc)   打印(“Demo.aa =,,,, Demo.aa)      print (“id (Demo.aa),=,,,, id (Demo.aa))   print (“id (obj1.aa),=,,,, id (obj1.aa))   print (“id (obj2.aa),=,,,, id (obj2.aa))

输出

obj1.aa =,, 1   时间=obj1.bb  11   时间=obj1.cc  1111年   时间=Demo.aa  222222年   时间=obj2.aa  2   时间=obj2.bb  22   时间=obj2.cc  2222年   时间=Demo.aa  222222年   id (Demo.aa),=,, 4645988944   id (obj1.aa),=,, 4530158768   id (obj2.aa),=,, 4530158800

从上面我们可以看的出,bb, cc为普通字段,每个类独有一份,相互不影响,而且需要使用类对象访问,而Demo.aa和obj.aa是不同的,我们看到obj.aa的行为与普通字段类似,如果去掉obj1.aa=xx和obj2.aa=xx,那么obj1.aa和演示。aa是相同的,在内存中的地址也是相同的。这里涉及到python类的另外一种特性——临时属性。

通常情况下我们都使用普通字段,当一个变量在类的所有对象中共同使用,而且数据共享的时候,我们就可以使用静态字段。

方法

方法包括:普通方法,静态方法和类方法。他们的区别在于调用方式不同。

普通方法:由对象调用;包含一个自我参数,执行普通方法时,自动将调用该方法的对象赋值给自我;

类方法:由类调用;包含一个cls参数,执行类方法时,自动将调用该方法的类复制给cls;

静态方法:由类调用,没有默认参数;

class  Foo:   ,,,FooName =,“静态字段“   ,,,def  custom_func(自我,,名字):   ,,,,,,,#,普通方法,至少包含一个自我参数   ,,,,,,,印刷(“普通方法,),,,@classmethod   ,,,def  class_func (cls,,的名字):   ,,,,,,,#,类方法,至少包含一个cls参数   ,,,,,,,印刷(“类方法,),,,@staticmethod   ,,,def  static_func(名称):   ,,,,,,,#,静态方法,没有默认参数   ,,,,,,,印刷(“静态方法“)      f =, Foo() #,调用普通方法f.custom_func (“aaa") #,调用类方法Foo.class_func (“bbb") #,调用静态方法Foo.static_func (“ccc")

普通方法中可以直接使用对象的普通字段self.name

python面向对象——类成员的案例分析