zoukankan      html  css  js  c++  java
  • 博客

    1、面向过程编程

    ​ 核心是过程二字,过程指的是做事的步骤,即先干啥、再干啥、后干啥
    ​ 基于该思想编写程序就好比在涉及一条条的流水线

    ​ 优点:复杂的问题流程化、进而变得简单化
    ​ 缺点:扩展性差

    2、面向对象编程

    ​ 核心是对象二字,对象就是一个用来盛放相关数据与相关功能的容器

    ​ 优点:程序解耦合强,扩展性高
    ​ 缺点:比面向过程更复杂

    衣柜:
        x="asdf"
        y=18
        z=[1,2,3]
        a=1
        def f1():
            print("登录功能1")
            print("登录功能2")
            print("登录功能3")
    
    
    化妆包:
        e=5
        def f2():
            print("注册功能1")
            print("注册功能2")
            print("注册功能3")
    
    厨房:
        b=2
        c=3
        d=4
        def f3():
            print("转账功能1")
            print("转账功能2")
            print("转账功能3")
    

    对象是数据与功能的集合体,而类则对象之间相同数据与功能的集合体
    对象1:

    学生1的数据
    
    ​    name = "egon"
    ​    age = 18
    ​    gender = "male"
    
    对象2:
    
    学生2的数据
    
    ​    name = "王三炮"
    ​    age = 19
    ​    gender = "female"
    
    
    对象3:
    
    学生3的数据
    
    ​    name = "李大炮"
    ​    age = 20
    ​    gender = "male"
    
    
    
    学生类:
    
    学生对象相同的数据
    
    ​    school = "上海校区"
    
    学生对象相同的功能
    
    ​    选课功能
    

    1、在程序必须先定义类:

    是申请内存空间,把对象之间相同的数据与功能存起来
    类在定义时就会立即执行类体代码,会产生类的名称空间,然后类名指向该名称空间
    class Student:
    学生对象相同的数据
    school = "上海校区"

    ​ 学生对象相同的功能
    ​ def choose_course(self):
    ​ print('正在选课')

    ​ print('====>')

    print(Student.dict)

    2、然后调用类来产生对象,调用类的过程又称之为实例化

    调用类的本质:就是产生一个与类相关联子空间

    stu1 = Student()
    stu2 = Student()
    stu3 = Student()
    
    print(stu1.__dict__)
    print(stu2.__dict__)
    print(stu3.__dict__)
    
    stu1.__dict__["name"] = "egon"
    stu1.__dict__["age"] = 18
    stu1.__dict__["gender"] = "male"
    stu1.name = "egon"
    stu1.age = 18
    stu1.gender = "male"
    
    stu2.name = "王三炮"
    stu2.age = 19
    stu2.gender = "female"
    
    stu3.name = "李大炮"
    stu3.age = 20
    stu3.gender = "male"
    
    
    print(stu1.__dict__)
    print(stu2.__dict__)
    print(stu3.__dict__)
    
    
    print(stu1.name)
    print(stu1.age)
    print(stu1.gender)
    print(stu1.school)
    print(stu1.choose_course)
    
    def func(stu1):
        print(stu1.name)
        print(stu1.age)
        print(stu1.gender)
        print(stu1.school)
        print(stu1.choose_course)
    

    改进1:

    class Student:
        school = "上海校区"
    
    ​    def choose_course(self):
    ​        print('正在选课')
    
    stu1 = Student()
    stu2 = Student()
    stu3 = Student()
    
    def init(obj,x,y,z):
        obj.name = x
        obj.age = y
        obj.gender = z
    
    init(stu1,"egon",18,"male")
    init(stu2,"王三炮",19,"female")
    init(stu3,"李大炮",20,"male")
    
    print(stu1.__dict__)
    print(stu2.__dict__)
    print(stu3.__dict__)
    

    改进2:

    class Student:
        school = "上海校区"
    
    ​              空对象,"egon",18,"male"
    ​    def __init__(self, x, y, z):
    ​        self.name = x  # 空对象.name="egon"
    ​        self.age = y  # 空对象.age=18
    ​        self.gender = z  # 空对象.gender="male"
    ​        print("===>")
    ​        该函数内可以有任意代码,但是该函数不能返回非None值
    ​        return 123
    
    ​                    stu1
    ​    def choose_course(self):
    ​        print('%s 正在选课' %self.name)
    
    ​    def func(self,x,y):
    ​        print(self.name,x,y)
    

    一.调用类:

    1、会先创造一个与类相关联的子空间,也就对象=》空对象
    2、自动触发类内__init__(空对象,"egon",18,"male")
    3、返回一个初始化好的对象,我们可以赋值给一个变量名
    stu1 = Student("egon",18,"male")
    stu2 = Student("王三炮",19,"female")
    stu3 = Student("李大炮",20,"male")

    二:类属性操作:

    类与对象都可以通过.来访问属性完成增删改查的操作
    print(Student.dict)
    1、访问类的数据属性

    Student.school="xxx"
    print(Student.school)
    
    Student.xxx=111
    print(Student.__dict__)
    del Student.xxx
    print(Student.__dict__)
    

    2、访问类的函数属性:它就是一个普通函数,该传几个参数就传几个参数

    print(Student.choose_course)
    Student.choose_course(stu1)
    Student.choose_course(stu2)
    Student.choose_course(stu3)
    

    三:对象属性操作:

    对象.属性,会先从对象自己的空间里找,没有话去类中找

    1、类中的定义的数据属性为了给对象用的,而且所有对象共享的,大家访问的都是同一个地址
    print(id(Student.school))
    print(id(stu1.school))
    print(id(stu2.school))
    print(id(stu3.school))
    
    Student.school = "XXX" # 修改类的数据属性,所有对象都会跟着改
    print(stu1.school)
    print(stu2.school)
    print(stu3.school)
    
    stu1.school="YYY"
    print(stu1.__dict__)
    print(stu1.school)
    
    print(Student.school)
    print(stu2.school)
    print(stu3.school)
    
    2、类中的定义的函数属性,类可以调用但就是一个普通函数,而类中函数通常都是为对象
    准备的,也就是说是给对象用的,如何给对象用?绑定给对象

    print(Student.choose_course)
    print(stu1.choose_course)

    stu1.choose_course() # choose_course(stu1)
    stu2.choose_course() # choose_course(stu2)
    stu3.choose_course() # choose_course(stu3)

    stu1.func()

    dic={"k1":111}
    with open('a.txt',mode='wt',encoding='utf-8') as f:
    f.write(str(dic))

    with open('a.txt',mode='rt',encoding='utf-8') as f:
    line=f.read() # line="{'k1': 111}"

    print(type(line))

    ​ line=eval(line)
    ​ print(line['k1'])

    s=frozenset({1,2,3})
    print(s)

    print(pow(10,3,3)) # 10 ** 3 % 3

    l=[111,'aaa',333]
    res=reversed(l)
    for x in res:
    print(x)

    l=list(reversed(l))
    print(l)

    print(round(4.6))
    print(round(4.7))
    print(round(4.4))
    print(round(4.5))

    l=[111,222,333,44,555,666,777,888]

    s=slice(0,5,2)

    print(l[0:5:2]) # 0 2 4
    print(l[s]) # 0 2 4

    msg="hello world"
    print(msg[s])

    l=[444,111,222,555,666,333,777,888]
    new_l=sorted(l)
    print(new_l)

    dic={
    'zegon':3000,
    "lxx":2000,
    'axx':4000
    }
    res=sorted(dic,key=lambda x:dic[x],reverse=True)
    print(res)

    print(sum([1,2,3,4]))
    msg="hello"
    msg={"name":"egon"}
    l=[111,222,333]

    res=zip(msg,l)
    print(list(res))

  • 相关阅读:
    快速开始
    阿里为什么选择RocketMQ
    4 分布式消息队列的协调者
    9 首个Apache中间件顶级项目
    3、用适合的方式发送和接收消息
    2 生产环境下的配置和使用
    TOMCAT加载两次war包(重复加载)
    Google Protocol Buffer 的使用(二)
    Google Protocol Buffer 的使用(一)
    PostgreSQL及PostGIS使用
  • 原文地址:https://www.cnblogs.com/lgh8023/p/13187746.html
Copyright © 2011-2022 走看看