【Python】Java程序员学习Python(十)— 类、包和模块
我觉得学习到现在应该得掌握Python的OOP编程了,但是现在还没有应用到,先留一个坑。
一、类和对象
说到类和对象其实就是在说面向对象编程,学完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,的脚本,这个脚本的内容会在引入当前包的时候执行,同一个项目多次引用只会执行一次。
【Python】Java程序员学习Python(十)— 类、包和模块的更多相关文章
- 【Python】Java程序员学习Python(五)— 函数的定义和使用
不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍, ...
- 【Python】Java程序员学习Python(二)— 开发环境搭建
巧妇难为无米之炊,我最爱的还是鸡蛋羹,因为我和鸡蛋羹有段不能说的秘密. 不管学啥,都要有环境,对于程序员来说搭建个开发环境应该不是什么难题.按顺序一步步来就可以,我也只是记录我的安装过程,你也可以滴. ...
- 【Python】Java程序员学习Python(三)— 基础入门
一闪一闪亮晶晶,满天都是小星星,挂在天上放光明,好像许多小眼睛.不要问我为什么喜欢这首歌,我不会告诉你是因为有人用口琴吹给我听. 一.Python学习文档与资料 一般来说文档的资料总是最权威,最全面的 ...
- 【Python】Java程序员学习Python(六)— 流程控制、异常处理
和Java语言一样,Python也有基本的流程控制,简单了解下即可. 一.流程控制的元素 条件 条件就是布尔值或者布尔值的表达式,要么是True要么是False. 代码块 在Python中,代码块不是 ...
- 【Python】Java程序员学习Python(七)— 文本类详解(字符串、str)
如果一个女孩子喜欢看龙猫,那么请珍惜她,呵护她 任何一门语言,字符串总是最基本也是最需要掌握的一个变量,想想入门的Hello World,输出的就是字符串. 官方文档:https://docs.pyt ...
- 【Python】Java程序员学习Python(一)— 为什么学习Python
现在是6月份,毕业快3年了,虽然不能说对Java掌握的程度达到了如火纯青的地步,但是依然感觉到了瓶颈期,Java用的多了,也到了随心所欲的地步了,所以学第二门语言的想法一直在我脑海里闪现,有想法了就要 ...
- 【Python】Java程序员学习Python(四)— 内置方法和内置变量
<假如爱有天意> 当天边那颗星出现,你可知我又开始想念,有多少爱恋只能遥遥相望,就像月光洒向海面,年少的我们曾以为,相爱的人就能到永远,当我们相信情到深处在一起,听不见风中的叹息,谁知道爱 ...
- 【Python】Java程序员学习Python(十一)— IO
一.前言 io的内容其实还是有很多的,现在我也只是了解初步用法,当然详细内容还是应该参照官方api的: 官方api:https://docs.python.org/3/library/os.html. ...
- 【Python】Java程序员学习Python(九)— 集合(list、tuple、range)和映射(dict)
集合是一门语言最重要的一个特性,对集合支持的程度越好,使用起来越方便 一.表现形式 1.1 list list的基本用法: 使用中括号包裹,[1,2,3] 元素类型可以是任意类型,同样可以是list ...
随机推荐
- Eclipse无法编译 build无效 没有class文件
问题原因: 我遇到这个问题的原因是: maven 插件引起的,maven clean或maven build后,经常无法自动编译class(虽然project自动编译了,但是只有包文件夹名,而没有cl ...
- JDBC链接oracle数据库
package test; import java.sql.* ; public class JDBC_Test { //orcl为oracle数据库中的数据库名,localhost表示连接本机的or ...
- XMind *思维导图的安装步骤(图文详解)
不多说,直接上干货! XMind中文官网: http://www.xmindchina.net/ 这一款软件,是非常实用和棒,也帮助我了很多地方.推荐给大家 需要正版和激活的,请见博文最下端的QQ技 ...
- python笔记07-----打包模块(shutil,zipfile,tarfile)
1.shutil模块 复制删除 import shutil shutil.copy('filename', 'test2') # copy方法 f1 = open('filename',encodin ...
- jenkins 踩坑路 之 jenkins ssh 脚本
背景: 由于公司业务调整,整个业务要从阿里云迁移到aws,自然 jenkins 也是要进行迁移的.jenkins 迁移过程中遇到的问题在此记录下,希望能给遇到类似问题的朋友些许帮助.也便于我后期遇到此 ...
- PLSQL计算质数
看到有人实现了一个计算质数的函数,就是效率有点差,贴一个以前写的计算质数的算法. 目标很简单,列出100以内的质数.其实算法很简单,两个循环就搞定了.但是发现使用不同的算法,执行效率差别之大相当惊人, ...
- java 集合框架小结
一:集合框架 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构. 任何集合框架都包含三大块内容:对外的接口.接口的实现和对集合运算的算法. 接口:即表示集合的抽象数据类型.Colle ...
- 【BI】资料收集
从无到有--什么是BI 什么是BI(Business Intelligence) - @我爱菊花 - 博客园 http://www.cnblogs.com/jiesin/archive/2008/06 ...
- Deep Q-Network 学习笔记(四)—— 改进②:double dqn
这篇没搞懂...这里只对实现做记录. 修改的地方也只是在上一篇的基础上,在“记忆回放”函数里,计算 target Q 时取值做下调整即可. def experience_replay(self): & ...
- tap 和click 事件区别
clike事件和 Zepto.js 中tap的区别 首先介绍下Zepto: 最初是作为移动端开发的库,但是却可以作为JQuery轻量级的替代品,因为API和JQuery相似,而文件更小. 介绍下tap ...