• 《自拍教程36》段位三 Python面向对象类


    函数只能面向过程,来回互相调用后顺序执行,
    简单的编码项目,还能应付的过来,
    复杂的大型项目,调用多了,就会乱。


    如何才能不乱呢,可尝试下, 面向对象类的概念,
    将现实世界的事物抽象成对象,将现实世界中事物的关系抽象成类,
    即要秉着“万物皆对象,一切皆可归类”的中心思想,
    去建立你的代码模型。


    一听特别晕乎,我也一样,
    我学Python的时候,写了将近大半年的面向过程函数,
    由于我也无法深入理解到面向对象类的概念,
    当时就是无法将代码写成面向对象类的形式。


    直到自己去慢慢学习面向对象类的概念,慢慢写大型一点的软件项目,
    秉着“万物皆对象,一切皆可归类”的中心思想,
    才恍然发现,面向对象类,真是好东西,
    比函数严谨多了。。。。。

    初级面向对象类的建模

    小项目或小工具的代码实现,模型比较简单:
    脑海里虚拟一个空白的世界,想象下这个世界有哪类事物(一般是名词),
    比如我们常用的包括:学生类,员工类,课程类等。
    比如我们本章节介绍的下载的脚本,如果要进行面向对象类的实现,
    肯定是可以的, 虽然实际编码过程中,我们可能用函数实现就足够了,
    但是秉着“万物皆对象,一切皆可归类”的中心思想。
    可创建一个下载器类, 下载器的类初始化(新建一个对象)是接入一个url,
    代表一个具备下载某个url的实例对象。
    如下:

    # coding=utf-8
    import os
    import requests
    
    class FileDownloader():   #类名
        def __init__(self, url):   #类的初始化
            self.url = url
    
        def download_file(self):
            s = requests.get(self.url)
            file_name = self.url.split("/")[-1]
            with open(file_name, "wb") as hf:
                hf.write(s.content)
            file_path = os.path.abspath(file_name)
            print("file downloaded to %s" % file_path)
            return file_path
    
    if __name__ == '__main__':
        fd_obj = FileDownloader("http://www.zipython.com/images/angel.mp3")
        # FileDownloader类初始化,成fd_obj对象
        fd_obj.download_file()  # 一般对象才能调用方法(函数)
    
    

    高级面向对象类的建模

    大项目的代码实现,模型比较复杂,
    此类建模,建议还是由专业软件比如UML等。

    类代表是具备相同属性或方法的一种事物类别,
    这种类别,一般不是真实的事物,只是虚拟出来的进行归类而已。
    所以类,一般不具有属性和方法,
    但是对象就是真实的事物,不然如何叫实例化对象呢,
    所以对象,是具备属性和方法的。

    以上同学有疑问?我定义类的时候,不是写了属性和方法吗?
    注意咯,定义类,一般用到self, self其实是一个默认的对象,
    所以:一般是实例化成对象后,才具备属性和方法(函数),
    对于测试人员,一般不鼓励使用无需实例化的静态方法。

    更多更好的原创文章,请访问官方网站:www.zipython.com

    原文链接:https://www.zipython.com/#/detail?id=b685d02527274d0ca155a84fcc569d3e
    也可关注“武散人”微信订阅号,随时接受文章推送。

  • 相关阅读:
    Codeforces Round #719 (Div. 3) 题解
    Codeforces Global Round 14 A~F题解
    AtCoder Beginner Contest 199 题解
    Codeforces Round #716 (Div. 2) A~D 题解
    Codeforces Round #713 (Div. 3) 题解
    Codeforces Round #712 (Div. 2) A~E 题解
    CodeCraft-21 and Codeforces Round #711 (Div. 2) A~E 题解
    CF839 D 莫比乌斯反演
    java存大数和高精度浮点数(BigInteger与BigDecimal)
    java科学计算常用方法(Math)
  • 原文地址:https://www.cnblogs.com/zipython/p/12423230.html
Copyright © 2020-2023  润新知