Python中的面向对象编程详解

Python中的面向对象编程详解(上) 这篇文章主要介绍了Python中的面向对象编程详解(上),本文讲解了创建类、实例化类、类属性、特殊方法内建属性、静态变量属性、实例变量属性、方法属性、静态方法、类方法等内容,需要的朋友可以参考下 创建类 Python 类使用 class 关键字来创建。简单的类的声明可以是关键字后紧跟类名: class ClassName(bases): 'class documentation strin... 阅读详情

本文讲解了创建类、实例化类、类属性、特殊方法内建属性、静态变量属性、实例变量属性、方法属性、静态方法、类方法等内容。
创建类:Python中,使用 class 关键字来创建一个类。简单的类的声明可以是关键字后紧跟类名。
实例化:类名后跟一对圆括号实例化一个类。
类属性
python的属性与Java和C++等面向对象语言不同,python的属性既包括了数据成员还包括函数元素,通过句点符号来访问。
特殊数据内建属性
C.name 类C的名字(字符串)
C.doc 类C的文档字符串
C.bases 类C的所有父类构成的元组
C.dict 类C的属性
C.module 类C定义所在的模块(1.5 版本新增)
c.class 实例c对应的类

特殊方法内建属性
dir():获得类属性或者实例属性名字列表.
静态变量属性(也称为类变量):直接在class作用域定义(在函数外定义)
动态变量属性(也称为实例变量):python的实例属性与Java和C++等不同.在Java和C++中,实例属性必须首先声明/定义,而python实例属性是动态创建。
设置实例的属性可以在实例创建后任意时间进行,也可以在能够访问实例的代码中进行。构造器init()是设置这些属性的关键点之一。

def __init__(self, name, data):
    self.name = name
    self.data = "123'

注意:self类似Java的this关键字作用,它是一个指向自身实例的引用。。。
方法属性:分为实例方法和类方法.实例方法只属于一个实例;而类方法属于类,也属于实例.
静态方法:静态方法是类级别的方法,不需要实例化类就可以通过类名直接调用.有两种方法定义:

#1》装饰器(常用)
@staticmethod   
def foo():
    print 'call static method'
#2》内建函数
def foo():
    print 'call static method'
foo = staticmethod(foo) #静态方法

类方法:类方法是类级别的方法, 与静态方法不同的是,它必须显示传入cls类参数;
而且如果还需要调用类中其他的静态方法,或者类方法, 要定义成类方法.类方法也有两种方法定义:

#1》装饰器(常用)
@classmethod    
def bar(cls):
    print 'call class method and access static varible(staticVar): ', cls.staticVar
#2》内建函数
def bar(cls):
    print 'call class method and access static varible(staticVar): ', cls.staticVar
bar = classmethod(bar)  #类方法

实例详解(可以加很多断点,在debug模式下,一步一步查看程序的运行轨迹)

class Target(): #定义类Target
    'This is Target definition' #定义__doc__属性
    staticVar = 'v1.0'  #定义静态变量(类变量)
    def __init__(self, name = 'default', data = 0): #定义构造函数
        self.name = name    #实例变量
        self.data = data    #实例变量
        
    def main():
        print "this is a test function"
        
    #方法一:用装饰器定义静态方法
    @staticmethod   
    def func1():
        print 'call static method func1'
        
    def func2():
        print 'call static method func2'
    func2 = staticmethod(func2) #方法二:定义静态方法
    
    #方法一:用装饰器定义类方法
    @classmethod    
    def bar1(cls):
        print 'call class method bar1 and access static varible(staticVar):',cls.staticVar
         
    def bar2(cls):
        print 'call class method bar2 and access static varible(staticVar):',cls.staticVar
    bar2 = classmethod(bar2)  #方法二:定义类方法
 
    if __name__ == '__main__':
        main()
 
#实例化
target = Target('aaa', 123)
print 'name is: ', target.name
print 'data is: ', target.data
#打印__doc__属性
print 'Target.__doc__ is: ', Target.__doc__
print 'target.__doc__ is: ', target.__doc__
#打印类__dict__属性
print 'Target.__dict__ is: ', Target.__dict__
#打印实例__dict__属性
print 'target.__dict__ is:',target.__dict__
#打印静态变量
print 'staticVar is: ', Target.staticVar
#打印内建函数dir()
print 'dir(Target) is: ', dir(Target)
print 'dir(target) is: ', dir(target)
#调用静态方法
Target.func1()
Target.func2()
#调用类方法
Target.bar1()
Target.bar2()

输出:
this is a test function
name is: aaa
data is: 123
Target.doc is: This is Target definition
target.doc is: This is Target definition
Target.dict is: {‘bar1’: <classmethod object at 0x029EF390>, ‘func2’: <staticmethod object at 0x029EF370>, ‘module’: ‘main’, ‘bar2’: <classmethod object at 0x029EF3B0>, ‘func1’: <staticmethod object at 0x0298EB10>, ‘staticVar’: ‘v1.0’, ‘main’: <function main at 0x029E7D70>, ‘doc’: ‘This is Target definition’, ‘init’: <function init at 0x029E7D30>}
target.dict is: {‘data’: 123, ‘name’: ‘aaa’}
staticVar is: v1.0
dir(Target) is: [‘doc’, ‘init’, ‘module’, ‘bar1’, ‘bar2’, ‘func1’, ‘func2’, ‘main’, ‘staticVar’]
dir(target) is: [‘doc’, ‘init’, ‘module’, ‘bar1’, ‘bar2’, ‘data’, ‘func1’, ‘func2’, ‘main’, ‘name’, ‘staticVar’]
call static method func1
call static method func2
call class method bar1 and access static varible(staticVar): v1.0
call class method bar2 and access static varible(staticVar): v1.0

基于python+whoosh的全文检索实现 Whoosh很快,但只使用纯Python,因此它可以在Python运行的任何地方运行,而无需编译器。 默认情况下,Whoosh使用Okapi BM25F排名功能,但与大多数事情一样,排名功能可以轻松定制。 与许多其他搜索库相比,Whoosh创建了相当小的索引。 Whoosh中的所有索引文本都必须是unicode。 Whoosh允许您使用索引文档存储任意Python对象。 示例: from whoo... 阅读详情

相关推荐

Python面向对象编程详解

面向对象编程提供了一种结构化和模块化的方式来组织和管理代码,使代码更易于理解、扩展和维护。在实际的软件开发中,合理运用面向对象编程的思想和技巧可以提高代码的质量和效率。在Python中,面向对象编程的基本概念包括类(class)、对象(object)、属性(attribute)、方法(method)等。面向对象编程是一种编程范式,它将现实世界中的事物抽象成对象,并通过定义对象的属性和行为来描述它们。Python是一门支持面向对象编程的高级编程语言,提供了丰富的语法和功能来创建和操作对象。

TechWhiz的博客 335

python实现class文件的简单解析

使用python简单解析了一下jvm的class文件,能读懂的话,就大致理解class类文件结构 from struct import Struct file = open(r"E:\JNI_Demo\target\classes\com\hong\jni\demo\ClassDemo.class", mode="rb") class Constant: value1 = None value2 = None value3 = None def __init.

weiailing3344的博客 1826

面向对象编程Python详解

python版,面向对象编程分三篇给大家介绍,这是第一篇,欢迎阅读学习,一起进步 Python专栏请参考:人生苦短-我学python 文章目录一.面向对象编程介绍二.类和对象三.类的构成四.定义类 和 创建对象五.对象属性获取六.魔法方法__init__()七.魔法方法__str__()八.魔法方法__del__() 一.面向对象编程介绍 如今主流的软件开发思想有两种:一个是面向过程,另一个是面向对象。面向过程出现得较早,典型代表为C语言,开发中小型项目的效率很高,但是很难适用于如今主流的大中型项目开发场景。面向对象则出现得更晚一些,典型代表为Java或C++等语言,更加适合用于大型开发

python面向对象编程详解

面向对象编程(OOP)是一种以为核心的编程范式。

freed_Day的博客 1180

Python 面向对象编程中的封装特性详解

Python 面向对象编程中的封装特性详解

嗨,欢迎来到我的 CSDN 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 1903

Python 面向对象编程(详解 + 实战)(类详解)

Python 面向对象编程(详解 + 实战)1. 面向对象编程1. 面向对象编程— Object Oriented Programming2.类(Class)和实例(Instance)1.类的定义2.创建实例3.绑定属性3. 数据封装4. 访问限制1. 限制访问2. 外部获取属性— get3. 外部修改属性 — set4. 特殊情况5. 继承6. 多态7. 静态语言 vs 动态语言8. 类属性2. 面向对象高级编程1. 限制实例的属性 slots2. @property3. 多重继承4. 定制类 : 形如

low5252的博客 2万+

Python 面向对象编程详解

面向对象,OOP英文全称(Object-Oriented Programming)是一种高效的编程思路,面向对象技术已经成为当今软件设计和开发领域的主流技术,面向对象编程是一种编程方式,使用 "类" 和 "对象" 来实现,所以面向对象编程其实就是对 "类" 和 "对象" 的使用,类就是一个模板,模板里可以包含多个方法(函数),方法里实现各种各样的功能,对象则是根据模板创建的实例,通过实例对象可以执行类中的方法,每个对象都拥有相同的方法,但各自的数据可能不同.

微软技术分享 8153

python 字典操作提取key,value

字典操作提取key,value 1.为字典增加一项 2.访问字典中的值 3、删除字典中的一项 4、遍历字典 5、字典遍历的key\value 6、字典的标准操作符 7、判断一个键是否在字典中 8、python中其他的一些字典方法 **9、将两个字典合并 ** a={'a':1,'b':2,'c':3} b= {'aa':11,'bb':22,'cc':33} #方法一 print...

fengbansha的博客 16万+

Windows和Ubuntu系统之间文件相互复制粘贴

在安装Ubuntu系统后发现与Windows系统的文件不能相互复制,网上查了很多教程,发现都是不能用的,能实现的方法如下所示: 第一步: sudo apt-get autoremove open-vm-tools 第二步:sudo apt-get install open-vm-tools-desktop 然后重启 搞定 ...

fengbansha的博客 8602

解决 ImportError: No module named _internal

解决 ImportError: No module named _internal 在运行 pip 时遇到如下错误: Traceback (most recent call last): File "/usr/local/bin/pip", line7, in &lt;module&gt; from pip._internal import main ImportError: No...

fengbansha的博客 2855

python __init__.py文件

python init.py文件 Python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录, 假如子目录中也有 init.py 那么它就是这个包的子包了。 当你将一个包作为模块导入(比如从 xml 导入 dom )的时候,实际上导入了它的 init.py 文件。 一个包是一个带有特殊文件 init.py 的目录。init.py 文件...

fengbansha的博客 689

Queue模块中的常用方法

Queue模块中的常用方法: Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False Queue.full 与 maxsize 大小对应 Queue.get([block[, timeout]])获取队列,timeout等待时间 Queue.get_nowait() 相...

fengbansha的博客 609

python获取文件所在目录和文件名,以及检索当前文件名的方法

python获取文件所在目录和文件名,以及检索当前文件名的方法 print(__file__) print(sys.argv[0]) print(os.path.dirname(__file__)) print(os.path.split(__file__)[-1]) print(os.path.split(__file__)[-1].split('.')[0]) 对应的返回结果: D:/off...

fengbansha的博客 392
上一篇: python3 多线程编程
下一篇: Queue模块中的常用方法
fengbansha
博客等级 码龄8年 20粉丝 20原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值