zoukankan      html  css  js  c++  java
  • python之面向对象(基础篇)

    面向对象是什么

    在了解面向对象之前,先展示一段代码:

    class Song(object):
    
        def __init__(self, lyrics):
            self.lyrics = lyrics
    
        def sing_me_a_song(self):
            for line in self.lyrics:
                print(line)
    
    #实例化
    happy_bday = Song(["Happy birthday to you",
                       "I don't want to get sued",
                       "So I'll stop right there"])
    
    bulls_on_parade = Song(["There rally around the family",
                            "With pockets full of shells"])
    #调用
    happy_bday.sing_me_a_song()
    
    bulls_on_parade.sing_me_a_song()
    

      面向对象就是将一些具有类似属性的事物抽象成一个一个的类,通过继承、多态、封装的形式去使用他们。

      在这里存在一个问题:为什么创建__init__或者别的类函数时需要多加一个self变量?

      答:如果不加self, cheese = 'Frank'这样的代码就存在歧义,它指的即可能是实例的cheese属性,也可能是一个叫cheese的局部变量。有了sel.cheese = 'Frank'就清楚地知道指的是实例属性self.cheese.

    面向对象的专有词汇

    • (class): 告诉python创建新类型的东西
    • 对象 (object) : 两个意思,即最基本的东西,或者某样东西的实例
    • 实例 (instance) : 这是让python创建一个类时得到的东西
    • def : 这是在类里面定义的函数的方法
    • self : 在类的函数中,self指代被访问的对象或者实例的一个变量
    • 继承 (inheritance) :指一个类可以继承另一个类的特性,和父子关系类似。
    • 组合(composition): 指一个类可以将别的类作为它的部件构建起来,有点像车子和车轮的关系
    • 属性(attribue): 类的一个属性,它来自于组合,而且通常是一个变量
    • 是什么( is-a ): 用来描述继承关系,如Salmon is-a Fish.
    • 有什么( has-a ): 用来描述某个东西是由另外一些东西组成的,或者某个东西有某个特征。

    便于理解的一些描述

    • class X(Y) : 创建一个叫X的类, 他是Y的一种。
    • class X(object) : def __init__(self, J) :  类X有一个__init__,它接收 self 和 J 作为参数。
    • class X(object) : def M(self, J) : 类X有一个名为M的函数,它接收 self 和 J 作为参数
    • foo = X() : 将foo设为类X的一个实例。
    • foo.M(J) : 从foo中找到M的函数,并使用 self 和 J 参数调用它。
    • foo.K = Q : 从foo中获取到K属性,并将其设置为Q.

    一段测试面向对象基础的代码

    import random
    from urllib.request import urlopen
    import sys
    
    WORD_URL = "http://learncodethehardway.org/words.txt"
    WORDS = []
    
    PHRASES = {
        "class %%%(%%%):":
            "Make a class named %%% that is-a %%%.",
        "class %%%(object):
    	def __init__(self, ***)":
            "class %%% has-a __init that takes self and *** params",
        "class %%%(object):
    	def ***(self, @@@)":
            "class %%% has-a function *** that takes self and @@@ params.",
        "*** = %%%()":
        "Set *** to an instance of class %%%.",
        "***.***(@@@)":
            "From *** get the *** function, call it with params self, @@@.",
        "***.*** = '***'":
        "From *** get the *** attribute and set it to '***'."
    }
    
    # do they want to drill phrases first
    if len(sys.argv) == 2 and sys.argv[1] == "english":
        PHRASE_FIRST = True
    else:
        PHRASE_FIRST = False
    
    # load up the words from the website
    for word in urlopen(WORD_URL).readlines():
        WORDS.append(str(word.strip(), encoding="utf-8"))
    
    def convert(snippet, phrase):
        class_names = [w.capitalize() for w in
                       random.sample(WORDS,snippet.count("%%%"))]
        other_names = random.sample(WORDS, snippet.count("***"))
    
        results = []
        param_names = []
    
        for i in range(0, snippet.count("@@@")):
            param_count = random.randint(1,3)
            param_names.append(', '.join(
                random.sample(WORDS, param_count)))
    
        for sentence in snippet, phrase:
            result = sentence[:]
    
            # fake class names
            for word in class_names:
                result = result.replace("%%%", word, 1)
    
            # fake other names
            for word in other_names:
                result = result.replace("***", word, 1)
    
            # fake parameter lists
            for word in param_names:
                result = result.replace("@@@", word, 1)
    
            results.append(result)
    
        return results
    
    # keep going until they hit CTRL-D 关闭当前程序
    try:
        while True:
            snippets = list(PHRASES.keys())
            random.shuffle(snippets)
    
            for snippet in snippets:
                phrase = PHRASES[snippet]
                question, answer = convert(snippet, phrase)
                if PHRASE_FIRST:
                    question, answer = answer, question
    
                print(question)
    
                input("> ")
                print(f"ANSWER: {answer}
    
    ")
    except EOFError:
        print("
    Bye")
    

       

  • 相关阅读:
    UML学习
    A problem has been encountered while loading the setup components. VS2008
    C#获取资源中的图片文件
    [网络技巧]一个网线头来测试网络程序
    通过传递"窗体的名字"来实例化窗体
    [解决方案] Flex TypeError: Error #1007: 尝试实例化的函数不是构造函数。
    Flex编译器的一些参数
    ArcGIS 9.3安装流程(包括Desktop和Server)
    Oracle Wrong solution [整理中]
    What's DOM?(1)
  • 原文地址:https://www.cnblogs.com/swearBM/p/9076518.html
Copyright © 2011-2022 走看看