python的类(简介,没什么内容)

参考:

https://www.cnblogs.com/studyDetail/p/6446180.html  (python的类)
https://www.cnblogs.com/zunchang/p/7965685.html (面向过程和面向对象编程,推荐)
http://xukaizijian.blog.163.com/blog/static/170433119201111894228877/ (python类的内置方法)

类的定义有点像以下的格式:

class  ClassName([BaseClass]):
    ClassAttribute=xx
    def Method(self[,arg1,arg2...]):
        self.instanceAttribute=xx
    <statement>
        ...
    ...

class是关键字
ClassName:表示定义的类的名字
BaseClass:这个是指要继承的基类的名字,如果为空,则默认继承object类
ClassAttribute:定义在类的作用域则代表类的自有属性
def Method(self[,arg1,arg2...]):这个是类里面的方法,只有类里面的方法才能对实例出来的数据进行操作
self.instanceAttribute:实例属性,每个实例的值不一样,这是因为self关键字的缘故

例子1:(self字段的作用)

In [8]: class c1():
   ...:     info=‘from class‘
   ...:     def __init__(self,myname):
   ...:         self.name=myname
   ...:     def printName(self):
   ...:         print self.name
   ...:             

In [9]: i1=c1(‘tom‘)

In [10]: i1.name
Out[10]: ‘tom‘

In [11]: i2=c1(‘jerry‘)

In [12]: i2.name
Out[12]: ‘jerry‘

In [13]: i1.info,i2.info
Out[13]: (‘from class‘, ‘from class‘)

__init__() :这个是类的内置方法,从超类object继承而来,作用是在类实例化的时候,自动执行一遍(这也是为什么要以两个下划线开头的原因,python解释器根据这些标记知道其有特殊含义,会执行特殊的操作),如果没有这个函数,我们就得手动执行函数里面的内容。
self的作用:self起到类似记录实例名的作用,比如在本例中 i1=c1(‘tom‘),python解释器会自动执行 c1.__init_(i1,‘tom‘) 操作,所以这里self就被替换成了i1实例名,而且因为python强制self放在第一位,由此,我们可以猜想,python是根据位置来传递实例名,而不是根据self关键字来传递的,事实也证明确实如此。

证明:

In [19]: class c1():
...:     info=‘from class‘
...:     def __init__(s,myname):
...:         s.name=myname
...:     def printName(s):
...:         print s.name
...:             

In [20]: i3=c1(‘hello‘)

In [21]: i3.name
Out[21]: ‘hello‘

In [22]: i4=c1(‘word‘)

In [23]: i4.name
Out[23]: ‘word‘

In [24]: i3.info,i4.info
Out[24]: (‘from class‘, ‘from class‘)

In [25]: c1.__init__(i4,‘jerry‘)

In [26]: i4.name
Out[26]: ‘jerry‘

其实类跟函数是很相似的,它也只是个可执行对象,只不过多了一些相关的控制机制

例子2:(类的继承和回调)

In [28]: class c1():
    ...:     info=‘from c1‘
    ...:     def __init__(self,x):
    ...:         self.name=x
    ...:     def printInfo(self):
    ...:         print self.name
    ...:
In [30]: class c2(c1):
    ...:     def printInfo(self):
    ...:         print "hello,my name is : "
    ...:         c1.printInfo(self)
    ...:         

In [31]: ins1=c2(‘jane‘)

In [32]: ins1.printInfo()
hello,my name is :
jane

In [34]: c2.info
Out[34]: ‘from c1‘

c2类继承了c1类的所有属性和方法,但是c2改写了c1的printInfo方法,在c2的方法中对c1的printInfo进行调用也就是所谓的"回调"

例子3:(类属性的影响)

In [11]: class c1():
    ...:     info=‘from c1‘
    ...:     def __init__(self,x):
    ...:         self.name=x
    ...:     def printInfo(self):
    ...:         print self.name
    ...:         

In [12]: ins1=c1(‘tom‘)

In [13]: ins2=c1(‘jerry‘)

In [14]: ins3=c1(‘boyka‘)

In [15]: ins1.info,ins2.info,ins3.info
Out[15]: (‘from c1‘, ‘from c1‘, ‘from c1‘)

In [16]: ins2.info=‘change one‘

In [17]: ins1.info,ins2.info,ins3.info
Out[17]: (‘from c1‘, ‘change one‘, ‘from c1‘)

In [18]: c1.info=‘change all ins‘

In [19]: ins1.info,ins2.info,ins3.info
Out[19]: (‘change all ins‘, ‘change one‘, ‘change all ins‘)

从上面可以看到ins2这个实例改变自身的info属性,不会影响到ins1和ins3,而c1类的info的改变,则改变了ins1和ins3,这是因为在实例化ins1,ins2,ins3的时候,(借用c语言的指针概念)它们都指向了类的info指针,而info指针指向了‘from c1‘这个数据块。默认情况下,当我们访问ins2.info的时候,python通过ins2的info指针找到类的info指针,然后通过类的info指针取得‘from c1‘数据。 当ins2.info重新赋值的时候,它新建一个数据对象‘chang one‘,然后把自己的info指向‘change one‘,所以ins1,ins3不受影响,而c1.info重新赋值的时候,它也是新建一个‘change all ins‘对象,然后类的info指针指向‘change all ins‘,而此时ins1和ins3的指针还是指向类的info指针,所以ins1和ins3的info取回的值都变了 (这个解释是错的,因为这样ins1.info和ins3.info的id应该不变,但是我测试是变化的,这里为了便于理解记忆暂时这么解释,待查明)

原文地址:http://blog.51cto.com/linzb/2089843

时间: 2024-10-28 22:09:41

python的类(简介,没什么内容)的相关文章

Python 3 mysql 简介安装

Python 3 mysql 简介安装 一.数据库是什么 1.  什么是数据库(DataBase,简称DB) 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数字模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并且可为各种用户共享. 2.什么是数据(Data) 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 在计算机中

python的类和对象——进阶篇

写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多时候我们在想要为自己的青春拼搏一次的时候都输给了偶尔的抵触和轻松愉悦的生活.我们不过和走到最后的人差了两个字——坚持!所以尽管进入类和对象这一部分,大家都会有畏难心理,但是坚持一下下,你就会是那个走到最后的人! 回顾 上一篇中我们初步的认识了类和对象,了结了它们的一些语法,就相当于得到了一个对象的骨

Android提供的LruCache类简介[转载]

转自:here 1 package android.util; 2 3 import java.util.LinkedHashMap; 4 import java.util.Map; 5 6 /** 7 * A cache that holds strong references to a limited number of values. Each time 8 * a value is accessed, it is moved to the head of a queue. When a

[Python]剖析类的机理

Python是如何创建类的? 当python的解释器碰到类的定义的时候,它会像对待其他code一样先读取其内容,然后为这个class创建一个新的namespace并且执行其代码.类的定义通常包括变量,方法以及其他类.这些内容都在新的命名空间里面.从类的内容读到到类的对象的产生是通过内置type函数来实现,所以type函数也提供可动态创建类的可能. 用type函数动态创建类的时候,type这个构造函数需要三个参数,分别是类名,基类以及其属性. type实际上是一个元类,所谓的元类就是可以创建其他类

Python 的类的下划线命名有什么不同?

1,以一个下划线开头的命名 ,如_getFile2,以两个下划线开头的命名 ,如__filename3,以两个下划线开头和结尾的命名,如 __init__()4,其它这些命名有什么不同吗 首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入.不过值得注意的是,如果使用 import a_module 这样导入模块,仍然可以用 a_module._some_var

python 定制类

看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()函数. 除此之外,Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类. __str__ 我们先定义一个Student类,打印一个实例: >>> class Student(object): ... def __init__(self, name):

Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- Android包 : android.net 包 (1接口, 19类, 3枚举, 1异常), android.net.http 包 (6类), android.net.nsd 包 (3接口, 2类), android.net.rtp (4类), android.net.sip 包 (1接口, 9类, 1

Python -- str 类

Python str类常用方法: class str(object): def capitalize(self):   # 全部字母变小写只有首字母变大写: >>> test = 'PYTHON' >>> test.capitalize() 'Python' def casefold(self): # 全部字母变小写: >>> test = 'PYTHON' >>> test.casefold() 'python' def cente

(转)python生态环境简介

Python生态环境简介 作者: Mir Nazim 原文: Python Ecosystem - An Introduction 译者: dccrazyboy  原译: Python生态环境简介 当开发人员从PHP,Ruby或者别的开发环境转换到Python时,所面对的最大问题是缺乏对Python开发的生态环境的充分理解.开发人员非常想得到一份关于完成大多数任务的指南或资源,而不论使用的方法是否规范. 下文所讲到的基本上都来源于我的网站,那存储着Python环境下对于网络应用开发的一些基本资料