【Python】Java程序员学习Python(十)— 类、包和模块
2017-06-15 21:08
417 查看
我觉得学习到现在应该得掌握Python的OOP编程了,但是现在还没有应用到,先留一个坑。
以上就是一个类定义和初始化的例子:
类定义 class className:,className后面可以带括号,也可以省略,带括号是为了继承,下面讲到。
__init__:这个方法会在类实例化的时候执行一次, 初始化代码可放在这里,也可以定义参数,在创建对象的时候传入,但是__init__方法只能有一个。
self:所有实例调用方法的时候,内部都会首先传入一个self参数,就是对应着方法的self(名字可以随意定,但是最好还是符合规范使用self),这个就相当于java类中的this关键字。
一个脚本中可以创建多个类,不过建议不要创建多个,当然若它们之间有很强的关联性也是可以的。
类是模块内的属性
其实我觉得Python对self的使用太不友好,应该学学java,最好是定义方法的时候不用指明并将self设置为关键字。
和Java相似,支持方法重写,当然也具有多态的特性,其他还要注意的是:
可以实现多继承,class DerivedClassName(Base1, Base2, Base3):,当调用子类没有的方法的时候会按顺序搜索父类。
用起来还算方便,内部使用时正常。当然类中还有一些默认的方法,就像上面介绍的__init__方法一样,可以对其进行重写,其他的方法还有:
__init__ : 构造函数,在生成对象时调用,这个方法会经常用到
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换,这个方法就是Java的toString()方法,用来描述对象的
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__div__: 除运算
__mod__: 求余运算
__pow__: 称方
除了上面说的两个方法__init__和__repr__外,其他的多是运算符重载,都不常用,了解即可,下面简单介绍一下。
如果没有定义+的方法__add__话,两个对象相加还是会报错的,这样重载运算符以后可以对两个对象进行草在。
在Python中,一个合格的包下面必须有一个名为__init__.py,的脚本,这个脚本的内容会在引入当前包的时候执行,同一个项目多次引用只会执行一次。
一、类和对象
说到类和对象其实就是在说面向对象编程,学完Java以后我觉得面向对象编程还是很不错的,首先封装了实现,当然实现的具体代码还是一行一行写的,但是只要代码封装的足够好,写一遍就可以应用到所有的地方,而类则是一组相关方法的集合。1.1 类的创建和实例化
类的创建使用关键字class,而类的实例化则直接是类名()即可:class Test: def __init__(self): print('init a class') def test(self): print(self) test=Test() test.test() ========控制台输出======== init a class <__main__.Test object at 0x0000021E9915A4A8>
以上就是一个类定义和初始化的例子:
类定义 class className:,className后面可以带括号,也可以省略,带括号是为了继承,下面讲到。
__init__:这个方法会在类实例化的时候执行一次, 初始化代码可放在这里,也可以定义参数,在创建对象的时候传入,但是__init__方法只能有一个。
self:所有实例调用方法的时候,内部都会首先传入一个self参数,就是对应着方法的self(名字可以随意定,但是最好还是符合规范使用self),这个就相当于java类中的this关键字。
一个脚本中可以创建多个类,不过建议不要创建多个,当然若它们之间有很强的关联性也是可以的。
类是模块内的属性
其实我觉得Python对self的使用太不友好,应该学学java,最好是定义方法的时候不用指明并将self设置为关键字。
1.2 类的继承
就像上面说过的那样,定义类的时候可以带括号,里面放要继承的类,简单例子如下:class Animal(): def say(self): print('animal say') class Dog(Animal): def say(self): print('dog say')
和Java相似,支持方法重写,当然也具有多态的特性,其他还要注意的是:
可以实现多继承,class DerivedClassName(Base1, Base2, Base3):,当调用子类没有的方法的时候会按顺序搜索父类。
1.3 类的属性和方法
Python中类中属性和方法的访问权限只有两种,公开和私有,但是没有权限标识符来定义,而是在私有的属性或者方法名前加两个下划线来表示:class Dog(): __name='lit' def __say(self): print('dog say')
用起来还算方便,内部使用时正常。当然类中还有一些默认的方法,就像上面介绍的__init__方法一样,可以对其进行重写,其他的方法还有:
__init__ : 构造函数,在生成对象时调用,这个方法会经常用到
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换,这个方法就是Java的toString()方法,用来描述对象的
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__div__: 除运算
__mod__: 求余运算
__pow__: 称方
除了上面说的两个方法__init__和__repr__外,其他的多是运算符重载,都不常用,了解即可,下面简单介绍一下。
1.4 运算符重载
这个简单来说是将运算符应用于对象之间,算是Java没有的一个特性,不过Java中的字符串可以使用+来连接,算是一个特例吧,下面举一个简单的例子:class People: def __init__(self,name): self.name=name def __add__(self,other): return self.name+' with '+other.name people1=People('yiwangzhibujian') people2=People('laizhezhikezhui') print(people1+people2) ======控制台输出====== yiwangzhibujian with laizhezhikezhui
如果没有定义+的方法__add__话,两个对象相加还是会报错的,这样重载运算符以后可以对两个对象进行草在。
二、包
包的出现主要还是为了解决命名冲突问题,毕竟有效的名字就那么多,如果没有指定具体的包的话是很容易重复的。当然包实质上就是文件夹而已。在Python中,一个合格的包下面必须有一个名为__init__.py,的脚本,这个脚本的内容会在引入当前包的时候执行,同一个项目多次引用只会执行一次。
相关文章推荐
- 各类程序员学习路线图(前端、PHP、Python、.NET、JAVA、ASP)
- 【Python】Java程序员学习Python(五)— 函数的定义和使用
- 【Python】Java程序员学习Python(一)— 为什么学习Python
- 【Python】Java程序员学习Python(三)— 基础入门
- java程序员的python之路(模块)
- 【Python】Java程序员学习Python(七)— 文本类详解(字符串、str)
- 【python学习笔记】python中的模块,类,函数,对象,实例(与JAVA的比较)
- 【Python】Java程序员学习Python(四)— 内置方法和内置变量
- 【Python】Java程序员学习Python(九)— 集合(list、tuple、range)和映射(dict)
- 【Python】Java程序员学习Python(十一)— IO
- 【Python】Java程序员学习Python(八)— 基本类型的基本运算
- 【Python】Java程序员学习Python(六)— 流程控制、异常处理
- 【Python】Java程序员学习Python(二)— 开发环境搭建
- 程序员进阶之路(C、C++、Java、Python经典书籍及学习顺序)
- Java程序员学习Python第一天的心得
- Python 学习笔记 - 11.模块(Module)
- 程序员学习Java的一剂良药:破坏源程序
- Java语言程序员人生:J2ee的学习流程简介
- 为什么要学习Java,成为Java程序员
- 对Java学习和Java程序员找工作的一些看法