zoukankan      html  css  js  c++  java
  • 面对对象的学习

    1、面对对象的总结

    •面向对象是一种编程方式,此编程方式的实现是基

    于对 类 和 对象 的使用

    •类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中

    公用的变量封装到对象中)

    •对象,根据模板创建的实例(即:对象),实例用于调用被包装在

    类中的函数

    •属性:类中所定义的变量

    • 方法:类中所定义的函数

    •实例化:通过类创建对象的过程

     总结:对象的抽象是类,类的具体化就是对象;也可以说类的实例化是对象,对象是类的实例。

    2、特征

    1. 封装

    (1) 概念:封装是将对象运行时所需的资源封装在程序对象中。简单来说,就是将内容封装起来,以后再去调用被封装的内容。

    (2) 调用封装的内容有2种方法:

    ——通过对象直接调用

    ——通过self间接调用

    •经典代码

    # -*- encoding:utf-8 -*-
    class Student:
        def __init__(self, name, age):
            self.name = name
            self.age = age
        def detail(self): 
            print(self.name)
            print(self.age)
    
    obj1 = Student('Jack',15) 
    print(obj1.name) 
    print(obj1.age)
    
    obj2 = Student('Sahra',13)
    obj2.detail()  

    2. 继承

    (1) 概念:继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。

    (2) 多继承

    注:Python的类可以继承多个类,而Java和C#中则只能继承一个类

    Python的类如果继承了多个类,那么其寻找方法的方式有2种:

     

    • 当类为经典类时会按照深度优先方式查找

    • 当类为新式类时会按照广度优先方式查找

     

    •经典代码

    # -*- encoding:utf-8 -*-
    
    
    class Person(object):   
        def talk(self):       
            print("Person can talk.")
    class Chinese(Person):  
        def talkC(Person):    
            print("Chinese can talk Mandarin.")
    class Characters(Chinese):  
        def people(self):        
            print("Chinese are clever and diligent.")
    class American(Person):   
        def talkA(self):       
            print("American can talk English.")
    
    C = Characters() 
    A = American()  
    C.talk()        
    A.talkA()        
    C.people()

    3. 多态

    概念:多态指同一个实体同时具有多种形式,在赋值之后,不同的子类对象调用相同的父类方法,产生的执行结果不同。

    •经典代码

    # -*- encoding:utf-8 -*-
      import abc
      
      class Animal(metaclass=abc.ABCMeta): 
      
          @abc.abstractmethod
          def talk(self):
              pass
     
     class People(Animal): 
         def talk(self):
             print('say hello')
     
     class Dog(Animal):    
         def talk(self):
             print('say wangwang')
     
     class Pig(Animal):   
         def talk(self):
             print('say aoao')
     
     
     peo = People() 
     dog = Dog()   
     pig = Pig()   
     peo.talk()     
     dog.talk()
     pig.talk()
    

    三、三维向量类

    (1) 简述:实现向量的加减法、向量与标量的乘除法。

    (2) 代码实现:

    #  --coding: gb2312--
    ''' 三维向量 '''
    
    class vector3:
        def __init__(self, x_ = 0, y_ = 0, z_ = 0): #构造函数
            self.x = x_
            self.y = y_
            self.z = z_
    
        def __add__(self, obj):      #重载+作为加号
            return vector3(self.x+obj.x, self.y+obj.y, self.z+obj.z)
    
        def __sub__(self, obj):      #重载-作为减号
            return vector3(self.x-obj.x, self.y-obj.y, self.z-obj.z)
    
        def __mul__(self,n):         #重载*作为点乘
            return vector3(self.x*n, self.y*n, self.z*n)
    
        def __truediv__(self, obj):  #重载/作为除法
            return vector3(self.x/n, self.y/n, self.z/n)
    
        def __str__(self):
            return str(self.x)+','+str(self.y)+','+str(self.z)
    
    if __name__ == "__main__":
        n = int(input("请输入一个标量:"))
        a,b,c = map(int,input("请输入第一个向量:").split())
        v1 = vector3(a,b,c)
        a,b,c = map(int,input("请输入第二个向量:").split())
        v2 = vector3(a,b,c)
        print("两向量的加法:",v1 + v2)
        print("两向量的减法:",v1 - v2)
        print("标量与向量的乘法:",v1 * n)
        print("标量与向量的除法:",v1 / n)

    2. 英文字符串处理

     (1) 简述:用户输入一段英文,得到这段英文中所以长度为3的单词,并去除重复的单词。

     (2) 代码实现:

    方法一: 使用 jieba 库

    # -*- encoding:utf-8 -*-
    ''' 将一段英文中长度为3的单词输出,并去掉重复的单词 '''
    
    import jieba
    class ProString:
        Str = ""
        Dict = {}
        Ls = []
        def __init__(self,string,length = 3): #初始化
            self.string = string
            self.length = length
            
        def SignalWord(self):        #去除重复的单词
            self.words = jieba.lcut(self.string)   #jieba分词
            for _ in self.words:                   #与词频算法相似
                self.Dict[_] = self.Dict.get(_,0) + 1
            del(self.Dict[' '])                 #删除空格项
            self.Ls = list(self.Dict.keys())    #字典类型转化成列表类型
            self.StubbenWord(self.Ls)
    
        def StubbenWord(self,Ls):       #利用去除重复的单词,得到固定长度的单词
            for _ in Ls:
                if len(_) == self.length:
                    self.Str += _ + ' '
            self.printf(self.Str)
            
        def printf(self,Str):
            print("处理后的字符串为:",Str)
                
    if __name__ == "__main__":
        str = input("请输入字符串:")
        process = ProString(str,3)
        process.SignalWord()

    方法二: 使用 re库 (正则表达式)

    # -*- encoding:utf-8 -*-
    ''' 将一段英文中长度为3的单词输出,并去掉重复的单词 '''
    
    import re
    class ProStr:
        a = []
        def __init__(self, words, length = 3):
            self.words = words
            self.length = length
    
        def process(self):
            word_list = re.split('[. ]+',self.words)
            for _ in word_list:
                if len(_) == self.length:
                    if _ not in self.a:
                        self.a.append(_)
                else:
                    continue
            self.printf()
    
        def printf(self):
            print("处理后的字符串为:", end = '')
            for _ in range(len(self.a)):
                print(self.a[_],end=' ')
    
    if __name__ == "__main__":
        words = input("请输入字符串:")
        process = ProStr(words, 3)
        process.process()
  • 相关阅读:
    springcloud-04-自定义ribbon的配置方式
    springcloud-03-服务注册
    springcloud-02-eureka
    springcloud-01-介绍
    使用jdk生成ssl证书文件
    CentOS7忘记root密码的修改方法
    2.1 Scala语言概述
    1.大数据技术概述
    KL散度=交叉熵-熵
    7.数据结构---图(遍历)
  • 原文地址:https://www.cnblogs.com/lzxbs/p/10713599.html
Copyright © 2011-2022 走看看