038类和对象:继承

继承
1.继承简单使用:
   格式:class DerivefClassName(BaseClassName):
         BaseClassName:为基类、父类或超类
         DerriverfClassName:为子类
   如:>>> class Parent:             #父类
       ...     def hello(self):
       ...         print("father")
       ...
       >>> class Child(Parent):      #子类
       ...     pass
       ...
       >>> p = Parent()
       >>> p.hello()
       father
       >>> c = Child()               #子类继承了父类的方法
       >>> c.hello()
       father

2.如果子类中定义与父类同名的方法和属性,则会自动覆盖父类对应的方法或属性
   如:还是上面那个例子,修改子类的方法
       >>> class Child(Parent):     #给子类定义一个与父类同名的方法
       ...     def hello(self):
       ...         print("child")
       ...
       >>> c = Child()            
       >>> c.hello()                #子类中覆盖了父类的方法
       child

3.问题:子类定义了一个与父类同名的方法,但是子类也想使用父类的方法怎么办呢?
       在自动覆盖前调用父类的方法即可,方法有两种,如下:
 方法1:父类名称.方法名称(self),这里的self是子类的
       如:Fish.__init__(self)
       但是这个方法不是特别好
 方法2:super().方法名称()
       super函数超级在于,不需要给父类的名字,它会自动找出所有父类以及对应的方法。
       如:super().__init__()
 例:import random as r
    class Fish:
        def __init__(self):
            self.x = r.randint(0, 10)
            self.y = r.randint(0, 10)
        def move(self):
            self.x -= 1
            print("我的位置是:", self.x, self.y)
 
    class Goldfish(Fish):
        pass
 
    class Shark(Fish):
        def __init__(self):
            super().__init__()
            #Fish.__init__(self)
            self.hungry = True
        def eat(self):
            if self.hungry:
                print("吃货的梦想就是天天有的吃^_^")
                self.hungry = False
            else:
                print("太撑了,吃不下了!")

4.问题:如何屏蔽父类方法呢?
    方法:很简单,用pass即可
    如:>>> class Bird:
       ...     def fly(self):
       ...         print("Fly away")
       ...
       >>> class Penguin(Bird):
       ...     def fly(self):
       ...         pass
       ...
       >>> bird = Bird()
       >>> penguin = Penguin()
       >>> brid.fly()
       Fly away
       >>> penguin.fly()

5.多重继承: 就是可以继承多个父类的属性和方法
   能不用就不用,使用不当会导致重复调用(钻石继承、菱形继承)
   格式:class DerivefClassName(Base1,Base2...):
   如:>>> class Base1:            #父类1号
      ...     def foo1(self):
      ...         print("foo1")
      ...
      >>> class Base2:            #父类2号
      ...     def foo2(self):
      ...         print("foo2")
      ...
      >>> class C(Base1,Base2):   #子类
      ...     pass
      ...
      >>> c = C()  
      >>> c.foo1()                #继承父类1号
      foo1
      >>> c.foo2()                #继承父类2号
      foo2

练习:
1.定义一个点(Point)类和直线类(Line)类,使用getLen方法获得直线的长度
  1 #!/usr/bin/python
  2 #coding:utf8
  3
  4 import math
  5
  6 class Point:
  7     def __init__(self,x=0,y=0):
  8         self.x = x
  9         self.y = y
 10
 11     def getX(self):
 12         return self.x
 13
 14     def getY(self):
 15         return self.y
 16
 17 class Line:
 18     def __init__(self,p1,p2):
 19         self.x = p1.getX() - p2.getX()
 20         self.y = p1.getY() - p2.getY()
 21         self.len = math.sqrt(self.x*self.x + self.y*self.y)
 22
 23     def getLen(self):
 24         return self.len
 25
 26 p1 = Point(1,1)
 27 p2 = Point(4,5)
 28 line = Line(p1,p2)
 29 print(line.getLen())

时间: 2024-08-10 01:40:56

038类和对象:继承的相关文章

(二十二)类与对象 ---- 继承

什么时候用继承? 1.当类之间有显著不同,且较小的类是较大的类的组件时,用组合比较好 比如机器人类是一个大类,躯干类.胳膊类.腿类是小类 2.当类之间有很多相同的属性与功能,提取这些共性作为基类,用继承比较好 比如鸡和鸭,我们可以提取他们的共性(两只翅膀.用两只脚走路)做一个禽类,但是他们也有各自独特的个性(鸡会打鸣,鸭会游泳) class qing(): #共性提取为一个基类(禽类) wing = 2 #父类数据属性 def __init__(self,owner): self.owner =

2-初步了解C#-类与对象

本篇博客对应视频讲解 回顾 我们在第一篇文章中讲了编程中最基本的内容,如输入输出.字符串处理.数字类型计算.分支及循环结构等.无论学习什么语言,这些内容都是相通的. 本篇博客主要演示列表(List)的用法以及面向对象中类的概念,通过一个具体的实例去向大家展示如何对现实对象抽象,创建类,以及如何使用它. 理论基础 我们可以通过官方文档中的解释先初步理解一下列表.类.对象等概念.然后我们通过实际的代码示例,通过自己动手编写去亲身体会一下. 理解面向对象编程 关于面向对象的编程,我们可以通过官方文档中

类和对象、封装、继承、多态

? 类和对象 ? 类和对象的概念 类:客观存在的,抽象的,概念的东西.一个类可以被定义为描述行为的模板: 对象:对象是具体的,实际的,代表一个事物.对象具有状态和行为. 类是对象的模板,对象是类的一个具体实体. 定义Java中的类 一个类可以包含以下任意变量类型. a)局部变量: 方法里面,构造函数或块中定义的变量称为局部变量.该变量将被声明和初始化的方法中,当该方法完成该变量将被销毁. b)实例变量: 实例变量都在一个类,但任何方法之外的变量.这些变量在类被加载的实例化.实例变量可以从内部的任

验证当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

结果:当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行.

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

面对对象-继承-Object类

java.lang.Object类:所有类的基类一个类如果没有显式使用extends继承其他类,这个类继承了Object类,在任何类的对象中使用Object中的方法 public class Student{ } public class Student extends Object{ } 常用的方法:getClass() 返回此 Object 的运行时类.主要用于反射机制.toString() 返回该对象的字符串表示.如果使用System.out.println(stu);默认调用stu.to

python-装饰器,类与对象,私有字段,析构,__call__,继承,多继承,接口

1.装饰器执行流程 装饰器:将原函数替换为wrapper函数 def outer() @outer  --- func1作为参数传入outer() def wrapper()  --- wrapper()放入内存 return wrapper   --- 返回wrapper地址,Func1重新赋值为wrapper Func1()  --- 调用func1函数 def wrapper() print '验证' def Func1() print 'func1' [[email protected]

黑马程序员——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类

一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对象的特点: * 符合人们思考习惯的思想 * 可以将复杂的事情简单化 * 将程序员从执行者转换成了指挥者 * 完成需求时:只需要寻找具备所需功能的对象或者创建所需功能的对象即可,简化开发效率并提高对象的复用性. 3.面向对象的三个特征:封装(Encapsulation).继承(Inheritance).多态(Polymorphism). 二.类与对象 (一)类与对象之间的关系 1.类的定义:类

JavaScript定义类和对象以及实现继承

定义类和对象 工厂模式 function createCar(color, doors, mpg){ var car = {}; car.color = color, car.doors = doors, car.mpg = mpg; car.showColor = function(){alert(this.color);}; return car; } 工厂模式比较简单,所以只适用于创建比较简单的对象. 构造函数方式 function Car(color, doors, mpg){ this