python类实例

1.谈谈python中类属性和类实例的属性的区别

一般来说,在Python中,类实例属性的访问规则算是比较直观的。

但是,仍然存在一些不是很直观的地方,特别是对C++和Java程序员来说,更是如此。 在这里,我们需要明白以下几个地方: 1.Python是一门动态语言,任何实体都可以动态地添加或删除属性。

2.一个类定义了一个作用域。 3.类实例也引入了一个作用域,这与相应类定义的作用域不同。

4.在类实例中查找属性的时候,首先在实例自己的作用域中查找,如果没有找到,则再在类定义的作用域中查找。 5.在对类实例属性进行赋值的时候,实际上会在类实例定义的作用域中添加一个属性(如果还不存在的话),并不会影响到相应类中定义的同名属性。

下面看一个例子,加深对上述几点的理解: 复制代码 代码如下: class A: cls_i = 0 cls_j = {} def __init__(self): self.instance_i = 0 self.instance_j = {} 在这里,我们先定义类A的一个实例a,然后再看看类A的作用域和实例a的作用域中分别有什么: 复制代码 代码如下: >>> a = A() >>> a.__dict__ {'instance_j': {}, 'instance_i': 0} >>> A.__dict__ {'__init__': , '__module__': '__main__', 'cls_i': 0, 'cls_j': {}, '__doc__': None} 我们看到,a的作用域中有instance_i和instance_j,A的作用域中有cls_i和cls_j。 我们再来看看名字查找是如何发生的: 复制代码 代码如下: >>> a.cls_i 0 >>> a.instance_i 0 在查找cls_i的时候,实例a的作用域中是没有它的,却在A的作用域中找到了它;在查找instance_i的时候,直接可在a的作用域中找到它。

如果我们企图通过实例a来修改cls_i的值,那会怎样呢: 复制代码 代码如下: >>> a.cls_i = 1 >>> a.__dict__ {'instance_j': {}, 'cls_i': 1, 'instance_i': 0} >>> A.__dict__ {'__init__': , '__module__': '__main__', 'cls_i': 0, 'cls_j': {}, '__doc__': None} 我们可以看到,a的作用域中多了一个cls_i属性,其值为1;同时,我们也注意到A作用域中的cls_i属性的值仍然为0;在这里,我们其实是增加了一个实例属性,并没有修改到类属性。 如果我们通过实例a操纵cls_j中的数据(注意不是cls_j本身),又会怎么样呢: 复制代码 代码如下: >>> a.cls_j['a'] = 'a' >>> a.__dict__ {'instance_j': {}, 'cls_i': 1, 'instance_i': 0} >>> A.__dict__ {'__init__': , '__module__': '__main__', 'cls_i': 0, 'cls_j': {'a': 'a'}, '__doc__': None} 我们可以看到a的作用域没有发生什么变化,但是A的作用域发生了一些变化,cls_j中的数据发生了变化。

实例的作用域发生变化,并不会影响到该类的其它实例,但是类的作用域发生变化,则会影响到该类的所有实例,包括在这之前创建的实例: 复制代码 代码如下: >>> A.cls_k = 0。

2.python中类的实例对象的理解总结?

9.3.3. 实例对象现在我们可以用实例对象作什么?实例对象唯一可用的操作就是属性引用。

有两种有效的属性名。数据属性 相当于 Smalltalk 中的“实例变量”或 C++ 中的“数据成员”。

和局部变量一样,数据属性不需要声明,第一次使用时它们就会生成。例如,如果 x 是前面创建的 MyClass 实例,下面这段代码会打印出 16 而在堆栈中留下多余的东西:x.counter = 1while x.counter < 10: x.counter = x.counter * 2print(x.counter)del x.counter另一种为实例对象所接受的引用属性是 方法。

方法是“属于”一个对象的函数。(在 Python 中,方法不止是类实例所独有:其它类型的对象也可有方法。

例如,链表对象有 append,insert,remove,sort 等等方法。然而,在后面的介绍中,除非特别说明,我们提到的方法特指类方法)实例对象的有效名称依赖于它的类。

按照定义,类中所有(用户定义)的函数对象对应它的实例中的方法。所以在我们的例子中,x.f 是一个有效的方法引用,因为 MyClass.f 是一个函数。

但 x.i 不是,因为 MyClass.i 不是函数。不过 x.f 和 MyClass.f 不同,它是一个 方法对象 ,不是一个函数对象。

3.python 类实例化

1、python的类中,以__(两个下划线)开头但不以__结束的就是私有的变量或者函数,私有函数和变量不能在class外调用到。

class test:

def __init__(self, num):

self.__num = num

privateTest = test(100)

privateTest.__num#会报错

当然也有办法调到,只是不建议那样做。

2、第一个class se()中的 变量s,是一个类变量,是class se的变量,类变量可以被类本身访问,如se.s,也可以被各个对象访问,而且由于是存在class里的所以值唯一,有点像C++里的static。

但是如果有某一个对象也创建了一个叫s的变量 覆盖了类变量,那么那个self.s就是对象的属性,而不会调到类变量。

你可以运行试试

# -*- coding: cp936 -*-

class A:

name = []

def __init__(self, name):

self.name.append(name)

def nameMyself(self, name):

self.name = [name]

print 'my name is',self.name, 'and class A1name is :', A.name

def test(self):

print "my name is", self.name

obj = A("num0")

obj1 = A("num1")

print "obj1`name", obj1.name#对象访问类变量name

print "class A`name", A.name#class自己访问类变量name

obj1.test()#此时还是访问的类变量name

obj1.nameMyself('aid')#给自己起个名覆盖类变量的name

obj1.test()#对于obj1来说只能访问自己的name了

print "class A`name", A.name#类变量依然存在

4.python类的实例化问题

你没有理解类变量和实例变量之间的关系。

第一个例子里面init中append是对类变量的操作。因此实例对象newmen1/2并没有自己的变量a,访问的都是类变量。

这时你如果显示类变量,print Men.a,newmen1.a,newmen2.a都是一样的。指向同一变量。

第二个例子中的init生成了对象自己的变量a,注意'='! 当实例对象调用init时,每个实例对象都拥有了自己的变量a,你再也无法再通过实例对象来访问到类变量了。事实上这种写法是很不好的。

这时你可以再一次显示类变量,print Men.a,newmen1.a,newmen2>> 0 1 2如果你希望所有对象共用类变量,你可以写class Men: a=0 def __init__(self,b): Men.a=b def sayHi(self): print'Hello,my name is',Men.a这样反而清晰,不要把实例对象公有的变量用self来表示。只会把你自己搞晕。

5.什么是Python的类,方法,对象,实例

类,简单来说就是一个函数的集合,在这个集合里面你定义了很多个函数;方法,其实就是你定义的这些函数。在下面的例子中Class Plus就是一个类,嵌套在这个类里面的两个函数就是所谓的方法,但是__init__只是用于初始化这个类,所以不算是方法。而get_result这个函数就是一个方法了。

举个例子:

Class Plus:

def __init__(self, a,b)

self.a = a

self.b = b

def get_result(self)

return self.a + self.b

在上面这个例子中,self就是对象,这个对象里面有两个参数,一个是self.a,另一个是self.b,对象简单来说就是自身具有多个属性(也可以说是子变量)的变量而已。如果说对象是笼统的东西,那么实例就是具体的东西。对象只是一个模板,有一些属性,而实例就是把数据填到这个模板里面去。比如这里你再这样写:c1 = Plus(1,2),这里c1就是一个实例,你还可以加一句:c2 = Plus(2,3),那c2也是一个实例,但是他们拥有共同的属性和模板。下面的例子就是调用了类里面的方法:

result1 = c1.get_result() >>>3 输出结果为3

result2 = c2.get_result() >>>5 输出结果为5

python类实例

转载请注明出处编程代码网 » python类实例

资讯

pythoncentos7

阅读(26)

本文主要为您介绍pythoncentos7,内容包括centos7怎么安装python3,如何安装Python3中,并设置本地编程环境在CentOS7,centos7怎么新建一个python工程。不要轻易更新Python版本,不然有可能会导致Linux很多命令不兼容新的版本 yum install opens

资讯

pythonk

阅读(23)

本文主要为您介绍pythonk,内容包括Python一种实现类似于重载的方法,*k是什么意思?,打印“最大的整数k"用python怎么表示?希望各位解答~~~,Python一种实现类似于重载的方法,*k是什么意思?。*k表示可变参数,通过可变参数实现类似于重载的方法

资讯

python中ifin用法

阅读(26)

本文主要为您介绍python中ifin用法,内容包括python中的ifin是什么意思,python语言中if语句是如何使用的?,pythonifin为啥会报错?。if条件语句后面需要跟随bool类型的数据,即True或者False。然而,如果不是bool类型的数据,可以将其转换成bool类

资讯

删除文件python

阅读(21)

本文主要为您介绍删除文件python,内容包括Python中如何删除一个文件,python怎么删除文件内容,45,如何使用python删除一个文件。文件操作不能删除里面的内容,只能新建一个文件,然后替换旧文件。下面的代码根据test,txt生成一个test1.txt。with

资讯

python类的实例

阅读(22)

本文主要为您介绍python类的实例,内容包括谈谈python中类属性和类实例的属性的区别,python中类的实例对象的理解总结?,python类实例化。一般来说,在Python中,类实例属性的访问规则算是比较直观的。 但是,仍然存在一些不是很直观的地方,特别是

资讯

python继承了类

阅读(22)

本文主要为您介绍python继承了类,内容包括Python中类继承问题?,python如何实现类的继承,python继承与类属性的使用。一个通用的例子是:已经有一个类,叫做鸟其有飞的方法/函数然后你另外实现了一个 麻雀的 类如果没有类的继承那么你就要:先去实

资讯

python类继承类

阅读(21)

本文主要为您介绍python类继承类,内容包括Python中类继承问题?,python如何实现类的继承,python如何实现类的继承。一个通用的例子是: 已经有一个类,叫做鸟 其有飞的方法/函数 然后你另外实现了一个 麻雀的 类 如果没有类的继承 那么你就要: 先

资讯

pythonlambdafor

阅读(22)

本文主要为您介绍pythonlambdafor,内容包括pythonLambda形式的使用?,pythonlambda函数,python的lambda形式的理解。4.7.5. Lambda 形式出于实际需要,有几种通常在函数式编程语言例如 Lisp 中出现的功能加入到了 Python。通过 lam

资讯

python3xp

阅读(32)

本文主要为您介绍python3xp,内容包括Python3.x和Python2.x的区别,python3.x里,\X和0X有什么区别,用python编写的程序怎么在xp系统下运行吗?。以下是Python3.x和Python2.x的主要区别1.性能Py3.0运行 pystone benchmark的速度比Py2.5慢30

资讯

升级macpython

阅读(29)

本文主要为您介绍升级macpython,内容包括mac怎么升级python版本,mac可以升级python吗知乎,如何更新Mac自带Python?。下载Python3.5 for Mac 一步步安装 安装的默认路径是:/Library/Frameworks/Python.framew

资讯

python信号

阅读(32)

本文主要为您介绍python信号,内容包括Python数字信号处理程序实现求解,用Python做一个信号分析处理软件,python中signal函数的运用。数字信号处理是把信号用数字或符号表示成序列,通过计算机或通用(专用)信号处理设备,用数值计算方法进行各种处

资讯

后台python

阅读(28)

本文主要为您介绍后台python,内容包括python怎么让程序在后台执行,python程序后台运行怎么实现,如何在Windows下编写在后台一直运行的Python程序。使用python自带的GUI就可以实现,python自带TK,使用tk的mainloop就会让python程序一直运行,只要

资讯

python的作用

阅读(25)

本文主要为您介绍python的作用,内容包括学生学python的好处,python的作用是什么,Python语言的优点是什么?。1.简单:Python奉行简洁主义,易于读写,它使你能够专注于解决问题而不是去搞明白语言本身。2.免费:Python是开源软件。这意味着

资讯

pythonerror

阅读(25)

本文主要为您介绍pythonerror,内容包括我的python错误在哪里??谢谢,python运行错误怎么办?,python中错误,但不知道错在哪。1. python的错误处理:在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错以及出

资讯

pythoncentos7

阅读(26)

本文主要为您介绍pythoncentos7,内容包括centos7怎么安装python3,如何安装Python3中,并设置本地编程环境在CentOS7,centos7怎么新建一个python工程。不要轻易更新Python版本,不然有可能会导致Linux很多命令不兼容新的版本 yum install opens

资讯

pythonk

阅读(23)

本文主要为您介绍pythonk,内容包括Python一种实现类似于重载的方法,*k是什么意思?,打印“最大的整数k"用python怎么表示?希望各位解答~~~,Python一种实现类似于重载的方法,*k是什么意思?。*k表示可变参数,通过可变参数实现类似于重载的方法

资讯

python中ifin用法

阅读(26)

本文主要为您介绍python中ifin用法,内容包括python中的ifin是什么意思,python语言中if语句是如何使用的?,pythonifin为啥会报错?。if条件语句后面需要跟随bool类型的数据,即True或者False。然而,如果不是bool类型的数据,可以将其转换成bool类

资讯

删除文件python

阅读(21)

本文主要为您介绍删除文件python,内容包括Python中如何删除一个文件,python怎么删除文件内容,45,如何使用python删除一个文件。文件操作不能删除里面的内容,只能新建一个文件,然后替换旧文件。下面的代码根据test,txt生成一个test1.txt。with

资讯

python类的实例

阅读(22)

本文主要为您介绍python类的实例,内容包括谈谈python中类属性和类实例的属性的区别,python中类的实例对象的理解总结?,python类实例化。一般来说,在Python中,类实例属性的访问规则算是比较直观的。 但是,仍然存在一些不是很直观的地方,特别是

资讯

python继承了类

阅读(22)

本文主要为您介绍python继承了类,内容包括Python中类继承问题?,python如何实现类的继承,python继承与类属性的使用。一个通用的例子是:已经有一个类,叫做鸟其有飞的方法/函数然后你另外实现了一个 麻雀的 类如果没有类的继承那么你就要:先去实

资讯

python类继承类

阅读(21)

本文主要为您介绍python类继承类,内容包括Python中类继承问题?,python如何实现类的继承,python如何实现类的继承。一个通用的例子是: 已经有一个类,叫做鸟 其有飞的方法/函数 然后你另外实现了一个 麻雀的 类 如果没有类的继承 那么你就要: 先

资讯

python结构数据

阅读(21)

本文主要为您介绍python结构数据,内容包括Python中内置的数据结构都有什么?,python如何表示数据结构,python如何表示数据结构。Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此