• 第四章--第二节:类


    类是面向对象开发中必须用到的,类就是表示现实世界中的事物和情景。

    零、创建类

    我们使用类前,应该创建类,创建类的方式很简单,语法如下:

    class 类名称():
      类的内容
    

    通过例子看一下,我们定义一个Cat类,类中定义一个打印名字的方法。

    # 定义一个Cat类
    class Cat():
      def __init__(self,name):
        """初始化name"""
        self.name=name
      def CatName(self):
        """打印出Cat的姓名"""
        print("我的猫的名字叫%s" % self.name)
    

    在上面的代码中方法 init 是一个特殊的方法,在创建类的实例的时候,实例会自动调用这个方法,一般用来对实例的属性进行初使化。另类里面的两个方法都有 self ,代表对象本身。在类中我们也看到了以 self. 开头的变量(self.name),只要是在类中见到这种形式的变量,就说明该变量可以在类中的所有方法中使用,同时也可以通过类的任何实例进行使用。

    一、实例化类

    既然我们已经创建了类,那么我们下一步就是使用类了,但是使用类的前提是要实例化类。实例化类的语法如下:

    实例化名称=类名称([参数])
    

    我们把刚才创建的类实例化,然后再调用其中的方法:

    # 实例化Cat类,传入Cate的名字
    cat=Cat("小白")
    #调用方法
    cat.CatName()
    

    二、继承

    当我们定义一个类的时候,可以从某个现有的类继承,新的类称为子类,而被继承的类称为基类、父类或超类。语法如下:

    class 子类名称(父类名称):
      类的内容
    

    子类继承了父类的所有操作,同时子类也可以有自己的方法或者重写父类的方法。我们把前面创建的cat类作为父类,编写一个新的cat类:

    class ChinaCat(Cat):
      def __init__(self,name,age):
        """增加一个age"""
        self.name=name
        self.age=age
        super().__init__(name)
    
      def GetAge(self):
        print("我的猫的年龄是 %s" % self.age)
    
    

    在这个新类里我们向 init 方法增加了 age 参数,并且增加了 GetAge 方法,这些方法在 Cat 类中是没有的。在我们实例化 ChinaCat 类后,即可以调用自己本身的方法,也可以调用父类的方法。我们接下来看一下例子:

    chinaCat=ChinaCat("小花",1)
    # 调用自己本身的方法
    chinaCat.GetAge()
    # 调用父类方法
    chinaCat.CatName()
    

    接下来我们再看一个例子,我们定义一个 Car 类,类中定义两个方法: StartUpShutDownCarColor ,之后再定义一个子类 ElectricCar,子类重写父类的 CarColor 方法,并定义一个自己的方法 BatteryPower ,最后我们再调用这两个类的方法。

    # 定义Car类
    class Car():
      def __init__(self,color):
        self.color=color
    
      def StartUp(self):
        print('启动引擎')
    
      def ShutDown(self):
        print('关闭引擎')
    
      def CarColor(self):
        color=self.color
        print('汽车的颜色是 %s' % color)
    
    # 定义子类ElectricCar
    class ElectricCar(Car):
      def __init__(self,color):
        self.color=color
        super().__init__(color)
    
      def CarColor(self,color=None):
        if color:
          self.color=color
        print('电动汽车的颜色是 %s' % self.color)
    
      def BatteryPower(self,battery):
        print('电动汽车电量还有 %d%%' % battery)
    
    # 调用Car类
    car=Car('蓝色')
    # 启动汽车
    car.StartUp()
    # 输出汽车的颜色
    car.CarColor()
    # 关闭汽车
    car.ShutDown()
    
    # 调用ElectricCar类
    e_car=ElectricCar('红色')
    # 启动汽车
    e_car.StartUp()
    # 输出汽车颜色
    e_car.CarColor()
    # 输出汽车电量,每次减去10%的电量
    battery=100
    e_car.BatteryPower(battery)
    for i in range(100,-10,-10):
      battery=i
      e_car.BatteryPower(battery)
      if i==0:
        print('电量用完了!')
        # 关闭引擎
        e_car.ShutDown()
    
    # 定义一个新的电动汽车实例
    new_e_car=ElectricCar('白色')
    new_e_car.CarColor('黑色')
    
    

    我们看到 ElectricCar 类重写了父类的 CarColor 方法,增加了颜色的设定,并将形参默认值设为 None ,方法体中的代码通过判断 Color 是否为 None 来决定是否使用实例化类的时候传入的颜色。

    在某些情况我们不希望子类调用父类的某些方法,这时我们就可以定义以 __ 开头的方法,这样的方法被称为 私有方法,父类的私有方法在子类的实例中是无法调用。我们看一下例子:

    class ClassA():
      def __init__(self):
        pass
      def __MyClassA(self):
        print('Class A')
    
    class ClassB(ClassA):
      def __init__(self):
        super().__init__()
      def MyClassB(self):
        print('Class B')
    
    # 实例化ClassB
    b=ClassB()
    # 调用ClassB的方法
    b.MyClassB()
    # 调用ClassAd的方法,将会报错
    b.__MyClassA()
    
    

    三、导入

    和函数类似,我们也可以将类保存进 py文件中 ,我们习惯上会将类及其子类放在同一个 py 文件中。当在另一个文件中需要使用某一个类时,只需要导入这个类即可,导入的语法和函数一样。

    四、小结

    本节我们讲的比较多,这节是本教程的重中之重,无比记牢类的用法。本节课的内容我将会在这个系列的教程讲完后,在《面向对象编程》中进一步讲解。

    五、作业

    1. 定义一个动物类,类中包含三个方法,分别执行:发出叫声、输出动物腿的数量和动物尾巴数量;
    2. 实例化上面定义的类;
    3. 将1中的类作为父类,扩展出几个动物的子类,并重写父类中的一个或几个方法,根据每种动物的特点扩展出各自独有的方法;
    4. 将父类的某个方法设为私有。
  • 相关阅读:
    记录时间开销的好处
    jQuery实现轮播图效果
    读《论证是一门学问》
    sqrt.java
    关于perl:Fatal: failed to find source perl5db.pl for epic_breakpoints.pm解决方法
    JAVA基础——对象与引用概念(转载)
    对百度搜索看法的转变
    C输出格式——转载
    Java static关键字与静态块
    简单js实现弹出登陆框div层,背景变暗不可操作
  • 原文地址:https://www.cnblogs.com/gangzhucoll/p/12778216.html
Copyright © 2020-2023  润新知