面向对象(上)

class Foo:  

    def Bar(self):

        print ‘Bar‘

    def Hello(self, name):

        print ‘i am %s‘ %name

# 根据类Foo创建对象obj

obj = Foo()

obj.Bar()            #执行Bar方法

obj.Hello(‘123‘#执行Hello方法

  • 面向对象:【创建对象】【通过对象执行方法】
  • 函数编程:【执行函数】

三大特性    封装  继承多态

  

一、封装

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

所以,在使用面向对象的封装特性时,需要:

  • 将内容封装到某处
  • 从某处调用被封装的内容
class Foo:

    def __init__(self, name, age):
        self.name = name
        self.age = age
  obj1 = Foo(‘wupeiqi‘, 18)
  print obj1.name    # 直接调用obj1对象的name属性
  print obj1.age     # 直接调用obj1对象的age属性

  obj2 = Foo(‘alex‘, 73)
  print obj2.name    # 直接调用obj2对象的name属性
  print obj2.age     # 直接调用obj2对象的age属性

class Foo:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def detail(self):
        print self.name
        print self.age

obj1 = Foo(‘wupeiqi‘, 18)
obj1.detail()  # Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18

obj2 = Foo(‘alex‘, 73)
obj2.detail()  # Python默认会将obj2传给self参数,即:obj1.detail(obj2),所以,此时方法内部的 self = obj2,即:self.name 是 alex ; self.age 是 78

2

二、继承

class 猫:

    def 喵喵叫(self):
        print ‘喵喵叫‘

    def 吃(self):
        # do something

    def 喝(self):
        # do something

    def 拉(self):
        # do something

    def 撒(self):
        # do something

class 狗:

    def 汪汪叫(self):
        print ‘喵喵叫‘

    def 吃(self):
        # do something

    def 喝(self):
        # do something

    def 拉(self):
        # do something

    def 撒(self):
        # do something

那么问题又来了,多继承呢?

  • 是否可以继承多个类
  • 如果继承的多个类每个类中都定了相同的函数,那么那一个会被使用呢?

1、Python的类可以继承多个类,Java和C#中则只能继承一个类

2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先广度优先

  • 当类是经典类时,多继承情况下,会按照深度优先方式查找
  • 当类是新式类时,多继承情况下,会按照广度优先方式查找

经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。

class D:

    def bar(self):
        print ‘D.bar‘

class C(D):

    def bar(self):
        print ‘C.bar‘

class B(D):

    def bar(self):
        print ‘B.bar‘

class A(B, C):

    def bar(self):
        print ‘A.bar‘

a = A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> D --> C
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()

经典类多继承

class D(object):

    def bar(self):
        print ‘D.bar‘

class C(D):

    def bar(self):
        print ‘C.bar‘

class B(D):

    def bar(self):
        print ‘B.bar‘

class A(B, C):

    def bar(self):
        print ‘A.bar‘

a = A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> C --> D
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()

新式类多继承

时间: 2024-10-26 07:26:40

面向对象(上)的相关文章

java之面向对象---上

1:值类型 八大类型:整性—>byte(1字节),short(2字节),int(4字节),long(8字节): 浮点数—>float(4字节)--8位整,23位小数,1位符号:double(8字节)--11位整数,52位小数,1位符号 字符—>char(2字节)---汉语的原因吧 逻辑型—>bool(1bit) 其它数据类型:类类型. 存储方式:8大类型变量存储于栈中:是值类型 类类型变量,是引用类型,对象存放于堆中,在栈中存引用值,大小固定为4字节. 只能通过new来构造对象,不

Java和C#在面向对象上语法的区别

做了几年了开发一直没有总结什么,回到了家乡的小城做了一名培训班的教员,教授软件开发的知识.细小的知识从头细细嚼来,别有一番滋味.或是以前遗漏的太多,或是确实没有系统的学习过,教学生的过程中自己也对教材有了一遍系统深入的学习.虽然教的和学的都很肤浅,但是为了帮助学生们理解,然后自己也会思考为什么会这样?这种来自于最基础的思考,一直向上反馈,发现这种思考原来可以令自己进步的非常快.虽然目前还在思考入门阶段的问题,已经受益良多了.那么如果把之前的开发中的问题都思考一遍,又能收获多少能?写写博客吧,一直

第04章(面向对象——上)

1 /***************** 2 ***第四章面向对象(上) 3 *******知识点: 4 **************1.类和对象 5 ******************1.1 关键字 6 ******************1.2 定义 7 ******************1.3 使用 8 **************2.方法和属性 9 ******************2.1 关键字 10 ******************2.2 方法重载和重写 11 ******

黑马程序员-Java面向对象上《二》

                         ------- android培训.java培训.期待与您交流! ---------- 1.面向对象的设计思想  面向过程:是以一个流程为单位,考虑它的实现方法,关心的是它的功能实现. 面向对象:是以具体事物为单位,考虑它的属性(特征)和动作(行为). 2.面向对象思考问题的方式 有哪些对象? 对象有什么特征和功能? 对象之间的关系? 3.类和对象 3.1,面向对象的编程思想:是力图使计算机语言中对事物的描述尽可能的与现实中的该事物的本来面目一致

Java编程基础-面向对象(上)

一.面向对象的概念 1.概念:面向对象是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题.当然,一个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能.这样当应用程序功能发生变动时,只需要修改个别对象就可以了,从而使代码更容易得到维护.面向对象强调的是对象,它使复杂的内容简单化了,让我们从执行者变成了指挥者. 2.特点:面向对象的特点概括起来就是继承性.封装性和多态性. 3. 封装性:封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界

面向对象-上

面向对象 面向对象是一种编程思想,同面向过程一样也是封装,但是不一样的是面向对象的封装依据主体,也就是说每一个封装包代表一个主体,而其中的变量值为主体的属性,函数为主体实现其功能的方法. 基本格式: class 类名{属性(变量),方法(函数)}; var_dump(对象)   只能打印出对象的非静态属性   无法打印出静态属性.类常量 1.使用class来定义类名 2.定义属性跟定义变量一样,方法跟函数一样   2.1属性和方法的声明有三种模式:public | protected | pri

Python 面向对象(上)

一. 什么是面向对象? 1. 在了解面向对象之前,首先我们需要知道两个概念:(1)什么是函数?函数是对功能或动作的一种封装.函数的语法结构如下: def func(arg1): '''函数的内部有函数体''' print("这里是函数内部") func(arg2) 上面的结构中, func是函数名, arg1是形参, 在函数的内部是函数体. 在定义了函数以后, 我们只需要在下面 用函数名接上一个小括号( func() ) 就可以调用函数了, 小括号内部的 arg2 表示实参. (2)什

第七章:Python基础のXML操作和面向对象(上集)

本課主題 XML介绍和操作实战 shutil 模块介绍和操作实战 subprocess 模块介绍和操作实战 XML介绍和操作实战 對於浏览器返回的字符串有以下幾種: HTML JSON,表现是列表和字典的格式 XML XML的應用 一个属性里包含多过属性,一类是页面上做展示的时候可以用到XML,就是为别人来调用(这也是字符串类型的一个XML格式数据);另外一类是配置文件.你可以從文件裡打開一個XML文件,它返回的是一個XML形式的字符串:也可以通過發送 HTTP請求,返回一個 XML 形式的字符

java基础学习_面向对象(上)01_day07总结

==========================================================================================================================================================涉及到的知识点有:1:面向对象(掌握) (0)面向过程和面向过程开发 (1)面向对象思想概述 (2)面向对象的思想特点 (3)把大象装进冰箱(理解) (4)类与对象的关系 (5)类的定义及使用

java基础学习_面向对象(上)02_day07总结

==========================================================================================================================================================涉及到的知识点有:---------------------------------------------------------------------------------------