文档章节

python学习---面向对象的编程续一(五)

开源中国首席----
 开源中国首席----
发布于 2014/05/23 14:17
字数 1562
阅读 23
收藏 0

题外话:关于缩进

    python关于缩进,对于新手,或者学过其他语言,然后再学习python对于格式可能有些不习惯。同时也没有{},刚开始我也为这种格式蛋疼了一会,由于缩进有问题,连编译都编译不了。但是如果你选择了一款正确的编辑器,然后再严格按照这种风格去编码,你会发现你的python代码是如此的漂亮。在这里我推荐pycharm ,关于注册什么的,自己可以在网上搜搜注册码,这是一款我认为比较好用的编辑器。希望你也能喜欢。

注:前面四部分,都是我参看《python简明教程》 很容易理解,所以就将其中的一些比较重要的概念罗列了出来,接下来的小节,将会加入自己的理解,并且逐步深入,请各位网友多加指点

python的面向对象深入

#-*- coding:utf-8 -*-

__author__ = 'oldcaptain.cc'

class SchoolMember:

'''代表任何学校成员'''

def __init__(self,name,age):

self.name = name

self.age = age

print '初始化的成员: %s' % self.name

def tell(self):

'''说话细节'''

print '名称:"%s" age : "%s"'%(self.name,self.age)

class Teacher(SchoolMember):

'''代表一个老师'''

def __init__(self,name,age,salary):

SchoolMember.__init__(self,name,age)

self.salary = salary

print '初始化的老师有 : %s' %self.name

def tell(self):

SchoolMember.tell(self)

print '科目 : "%d" ' % self.salary

class Student(SchoolMember):

def __init__(self,name,age,marks):

SchoolMember.__init__(self,name,age)

self.marks = marks

print '初始化的学生为 : %s' %self.name

def tell(self):

SchoolMember.tell(self)

print 'marks : "%d"' %self.marks

t = Teacher("oldcaptain",40,30000)

s = Student("guopeng",22,75)

上面这段代码是一段关于继承的实现,表现出了多态,并且展现出了一些关于python面向对象的一些语法知识。

1、pass关键字

当这个类中没有没有定义任何关键字或者方法的时候,可以使用关键字pass,相当于java中的{}什么也没有,一个空的类。

2、缩进

在类中的所有东西都缩进,if,函数,for,等等,当不缩进的代码则被认为不属于这个类。

3、继承

在python中,类的基类只是简单的列在类名后面的小括号中,如果你想要多重继承,那么就在类名后面的小括号中列出你要继承的类名,并且以逗号进行分割。在java中,父类的方法在子类方法执行前被自动调用,python不是这样,你必须显示的调用父类中的合适方法。

4、再说__init__方法

__init__在类的实例被创建后被立即调用。他可能会让你误解为构造函数。因为他看上去像(在类中,习惯被第一个定义的方法)行为也像(在一个新创建的实例中,它是第一个被调用的方法),说它不正确时因为对象再调用init方法时,已经被构造出来了,你已经有了 一个对类的的新实例的有效引用。但是__init__是在python中你可以得到最接近构造函数的东西。并且他也扮演者非常相似的角色。

5、参数

每个类的方法的第一个参数,包括__init__,都是指向类当前的实例的引用。按照习惯这个参数总是被称为self。在__init__方法中,self指向新创建的对象;在其他的类方法中,它指向方法被调用的类实例。尽管当定义方法时你需要明确指定self,但在调用方法时,你不能指定他,python会给你自动加上的。

__init__方法可以接受任意数目的参数,就像函数一样,参数可以用缺省值定义,即可以设置成对于调用者可选。

6、self

self相当于c++或者java中的this,但是他并不是一个保留字,它只是一个命名习惯。所以请一定坚持这个习惯。

7、何时使用self和__init__

当你定义自己的类方法时,你必须明确的将self作为每个方法的第一个参数列出,包括__init__ ,当你从类中调用一个父类的方法时,你必须包括self参数,但当你从类的外部调用你的类方法时,你不必对self参数指定任何值;你完全将其忽略,而python会自动替你增加实例的引用。刚开始这里可能不是很好理解。所以需要慢慢在代码中理解这些特性。

注:__init__方法是可选的,但是一旦定义了之后,就必须要显示调用父类的__init__方法(如果它定义了的话)这样才是正确的:无论何时子类想要扩展父类的行为,后代方法必须在适当的时机,使用适当的参数,显示调用父类方法。

8、类的实例

每一个类的实例有一个内置属性,_class_,它是对象的类。(注意这个表示,在内存中的地址,经过我自己测试,这里并不是物理地址。)

在python中,每一个对象都有自己的元数据属性,包括__class__,__dict__,__module__等.

9、参数的重载

在java中支持通过参数列表的重载,也就是一个类可以同名的方法,但这些方法或者是参数个数不同,或者参数的类型不同,像plsql支持参数名的重载。在python中两种都不支持,总之没有任何形式的函数重载。一个__init__方法就是一个__init__方法,不管什么样的参数,一个类中只能有一个__init__方法,并且如果一个子类拥有一个__init__方法,他总是覆盖父类的__init__方法,甚至子类可以用不同的参数列表来定义它。

python作者解释 :方法的覆盖 : 子类可以覆盖父类中的方法。因为方法没有特殊的优先的设置,父类中的一个方法在调用同类中的另一个方法时,可能调用到的是子类中覆盖的覆盖的父类的同名方法的方法。

© 著作权归作者所有

开源中国首席----
粉丝 6
博文 44
码字总数 38812
作品 0
西安
私信 提问
【Python Web学习路线】干货整理,不谈虚的,让你短时间高效学好它!

无论是大数据、人工智能还是机器学习,Python都是最热门的首选语言。 学好Python,可以从事Python Web工程师、Python数据分析、人工智能专家等岗位。本期专题,分享的主题是“如何成为一枚优...

Eddie_yang
2018/12/24
597
0
Python爱好者要明确的未来方向

了解Python是什么? Python 这门语言它是面向对象编程语言,有封装强大的类库,Python目前已经超过了Java成为人们最喜欢的编程语言。相比Java,Python更加的容易理解、免费开源的代码、Pytho...

糖宝lsh
2018/09/20
54
0
Python爱好者都有明确自己能在Python中干嘛

了解Python是什么? Python 这门语言它是面向对象编程语言,有封装强大的类库,Python目前已经超过了Java成为人们最喜欢的编程语言。相比Java,Python更加的容易理解、免费开源的代码、Pytho...

胆小的皮皮
02/20
0
0
USF MSDS501 计算数据科学中文讲义·翻译完成

原文:parrt/msds501 译者:飞龙 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 机器学习交流群 629470233 ApacheCN 学习资源 在线...

ApacheCN_飞龙
05/09
0
0
Python 3 面向对象编程(第3版) 中英文Python 3 Object-Oriented Programming 3rd Edition - 2018.pdf

python测试开发项目实战-目录 python工具书籍下载-持续更新 python 3.7极速入门教程 - 目录 第2版 中文 介绍 本书主要介绍如何使用Python 3进行面向对象编程。1~4章介绍面向对象这一编程范式...

python测试开发人工智能安全
02/12
235
0

没有更多内容

加载失败,请刷新页面

加载更多

EDI 电子数据交换全解指南

EDI(Electronic Data Interchange,电子数据交换)技术使得企业与企业(B2B)实现通信自动化,帮助交易伙伴和组织更快更好地完成更多工作,并消除了人工操作带来的错误。从零售商到制造商、物...

EDI知行软件
今天
3
0
CentOS7的LVM动态扩容

# 问题 CentOS7上面的磁盘空间有点紧张,需要扩容。 解决 查询当前磁盘状态 [root@xxx ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 2:0 1 4K ...

亚林瓜子
今天
5
0
Kafka 0.8 Producer (0.9以前版本适用)

Kafka旧版本producer由scala编写,0.9以后已经废除 示例代码如下: import kafka.producer.KeyedMessage;import kafka.javaapi.producer.Producer;import kafka.producer.ProducerConfig;......

实时计算
今天
5
0
Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
6
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部