美文网首页
2018-09-10-day16补充知识

2018-09-10-day16补充知识

作者: oxd001 | 来源:发表于2018-09-10 20:34 被阅读0次

    python创建对象先调用new()创建对象,然后再通过init()对对象进行初始化
    def new(cls,args,*kwargs):
    创建对象的代码块
    在调用init()的时候,对象已经被new()方法创建了

    本质上,python中类可以调用类中的所有方法

    1.多继承(了解)

    python中的类支持多继承,但是不建议使用
    多继承继承的时候,子类可以拥有所有父类的所有的方法和类的字段,但是只能继承第一个父类的对象属性

    class Animal(Object):
        def __init(self,name='小动物',age=0):
            self.age = age
            self.name = name
        def eat(self):
             print('%s在吃东西'%self.name)
    class Fly:
        def __init__(self):
            self.max_height = 0
        def fly(self):
            print('最大能飞%d米'%self.max_height)
    
    #Bird同时继承Animal类和Fly类
    class Bird(Animal.Fly):
        pass
    
    if __name__ =='__main__'
        bird =Bird()
        print(bird.name,bird.age)
    

    2.多态

    多态指的是多种形态
    有继承就有多态:不同类继承自同一个类其实就是对这个共同的父类的不同的形态,继承后对方法的重写也是多态的表现

    3.封装、继承、多态

    封装:一个类可以通过不同的方法对不同的功能进行封装。通过属性对不同的数据进行封装
    继承:通过继承可以让子类拥有父类的属性和方法

    4.包

    将多个模块封装到一起,就是包。包就是有一个默认文件init.py的文件夹
    导入包
    方式一:import 包名.模块
    -使用方式:包.模块.方法()
    方式二:from 包名 import 模块
    -使用方式:模块.方法()
    方式三:from 包.模块 import 方法/变量/类
    -使用方式:方法()

    5.raise 错误类型

    raise可以让程序主动崩溃,一般用于调试
    raise:关键字
    错误类型:必须是一个类,并且这个类是Exception的子类

    6.音乐播放与歌词同步

    from time import sleep
    import _thread as thread
    import pygame
    class Lyric:
        def __init__(self,time,word):
            self.time = time
            self.word = word
    
        def __gt__(self,other):
            return self.time > other.time
    
        def __str__(self):
            return '%.2f %s'%(self.time,self.word)
    
    class LyricAnalysis:
        #创建解析器对象的时候告诉我这个解析器是要解析那首歌
        def __init__(self,song_name):
            self.song_name = song_name
            self.all_lyrics = []
    
            self.__collect_lyric()
        def __collect_lyric(self):
            '''
            将时间和歌词提取出来
            '''
            dic_words={}
            try:
                with open('./files/%s.txt'%self.song_name,'r',encoding='utf-8',errors='ignore') as f:
                    for line in f:
                        lst = line.split(']')
                        for key in lst[:-1:]:
                            times = key[1:].split(':')
                            fen = float(times[0])
                            miao = float(times[1])
                            new_time =fen*60+miao
                            lyric = Lyric(new_time,lst[-1])
                            self.all_lyrics.append(lyric)
                    self.all_lyrics.sort()
                for key in dic_words.keys():
                    print(key,dic_words[key])
                    pass
            except FileNotFoundError:
                print('文件不存在')
    
        def get_word(self,time):
    
            for ly in self.all_lyrics:
                if ly.time > time:
                    return ly.word
            
        def print_word(self,window):
    
            i = 0
            font = pygame.font.Font('./font_01/aa.ttf', 30)
            while i<len(self.all_lyrics)-1:
                time = self.all_lyrics[i+1].time-self.all_lyrics[i].time
                text = font.render(self.all_lyrics[i].word,True,(0,0,255),(0,255,255))
                window.blit(text,(100,180))
                pygame.display.update()
                window.fill((255,255,255))
                sleep(time)
                i += 1
            text = font.render(self.all_lyrics[-1].word,True,(0,0,255),(0,255,255))
            window.blit(text,(150,180))
            pygame.display.update()
        def play_music(self):
            pass
            
    if __name__ == '__main__':
    
        an1 = LyricAnalysis('nlh')
        file = r'xwnlh.mp3'
        pygame.init()
        pygame.mixer.init()
        track = pygame.mixer.music.load(file)
        screen = pygame.display.set_mode([500,350])
        screen.fill((255,255,255))
        pygame.display.flip()
        while True:     
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit(0)
                if event.type == pygame.KEYDOWN:
                    thread.start_new_thread(an1.print_word,(screen,))
                    pygame.mixer.music.play()
    
    
    
    
    

    相关文章

      网友评论

          本文标题:2018-09-10-day16补充知识

          本文链接:https://www.haomeiwen.com/subject/pfsegftx.html