zoukankan      html  css  js  c++  java
  • 【Python入门篇】面向对象(第二部分)

     1、多继承

      Python同样有限的支持多继承形式。多继承的类定义形如下例:

    class DerivedClassName(Base1, Base2, Base3):
        <statement-1>
        .
        .
        .
        <statement-N>

      需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。

      Demo1 单独调用父类: 
       一个子类同时继承自多个父类,又称菱形继承、钻石继承。 
      使用父类名.init(self)方式调用父类时:

    class Parent(object):
        def __init__(self, name):
            self.name = name
            print('parent的init结束被调用')
    
    
    class Son1(Parent):
        def __init__(self, name, age):
            Parent.__init__(self, name)
            self.age = age
            print('Son1的init结束被调用')
    
    
    class Son2(Parent):
        def __init__(self, name, gender):
            Parent.__init__(self, name)
            self.gender = gender
            print('Son2的init结束被调用')
    
    
    class Grandson(Son1, Son2):
        def __init__(self, name, age, gender):
            Son1.__init__(self, name, age)  # 单独调用父类的初始化方法
            Son2.__init__(self, name, gender)
            print('Grandson的init结束被调用')
    
    
    gs = Grandson('grandson', 12, '')

      运行结果:

    parent的init结束被调用
    Son1的init结束被调用
    parent的init结束被调用
    Son2的init结束被调用
    Grandson的init结束被调用

      Demo2:

    #!/usr/bin/python3
     
    #类定义
    class people:
        #定义基本属性
        name = ''
        age = 0
        #定义私有属性,私有属性在类外部无法直接进行访问
        __weight = 0
        #定义构造方法
        def __init__(self,n,a,w):
            self.name = n
            self.age = a
            self.__weight = w
        def speak(self):
            print("%s 说: 我 %d 岁。" %(self.name,self.age))
     
    #单继承示例
    class student(people):
        grade = ''
        def __init__(self,n,a,w,g):
            #调用父类的构函
            people.__init__(self,n,a,w)
            self.grade = g
        #覆写父类的方法
        def speak(self):
            print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
     
    #另一个类,多重继承之前的准备
    class speaker():
        topic = ''
        name = ''
        def __init__(self,n,t):
            self.name = n
            self.topic = t
        def speak(self):
            print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))
     
    #多重继承
    class sample(speaker,student):
        a =''
        def __init__(self,n,a,w,g,t):
            student.__init__(self,n,a,w,g)
            speaker.__init__(self,n,t)
     
    test = sample("Tim",25,80,4,"Python")
    test.speak()   #方法名同,默认调用的是在括号中排前地父类的方法

      运行结果:

    我叫 Tim,我是一个演说家,我演讲的主题是 Python

     2、方法重写

      如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法,实例如下:

    #!/usr/bin/python3
     
    class Parent:        # 定义父类
       def myMethod(self):
          print ('调用父类方法')
     
    class Child(Parent): # 定义子类
       def myMethod(self):
          print ('调用子类方法')
     
    c = Child()          # 子类实例
    c.myMethod()         # 子类调用重写方法
    super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法

      输入结果:

    调用子类方法
    调用父类方法

     3、类属性与方法

      类的私有属性

      __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs

      类的方法

      在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。

      self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。

      类的私有方法

      __private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods

  • 相关阅读:
    阿里云ECS 网站访问变卡
    MySql导入导出sql脚本(转)
    Mysql数据库备份的问题:mysqldump: Got error: 1049: Unknown database 'blog;' when selecting the database(转)
    Mysql in 优化(转)
    根据查询更新JTable显示(转)
    MyEclipse部署项目到Tomcat上,但是classes文件夹下没有编译项目(转)
    POI Workbook workbook = WorkbookFactory.create(fis); 报NoSuchMethodError
    07-常用内置对象
    06-流程控制
    05-数据类型转换
  • 原文地址:https://www.cnblogs.com/xjf125/p/12421605.html
Copyright © 2011-2022 走看看