• 面向对象编程,类与对象的使用,内置函数


    今日内容概要:

    一、面向对象编程介绍(重点)

    二、类与对象的使用(重点)

    三、内置函数(重点)

    内容详解:

    一、面向对象编程介绍

    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:
        # 学生1的数据
        name = "egon"
        age = 18
        gender = "male"
    
    对象2:
        # 学生2的数据
        name = "王三炮"
        age = 19
        gender = "female"
    
    
    对象3:
        # 学生3的数据
        name = "李大炮"
        age = 20
        gender = "male"
    
        
        
    学生类:
        # 学生对象相同的数据
        school = "上海校区"
        # 学生对象相同的功能
        选课功能
    """
    2、实例化得到对象
    在程序中必须先定义类:是申请内存空间,把对象之间相同的数据与功能存起来
    类在定义时就会立即执行类体代码,会产生类的名称空间,然后类名指向该名称空间
    class Student:
        # 学生对象相同的数据
        school = "上海校区"
    
        # 学生对象相同的功能
        def choose_course(self):
            print('正在选课')
    
        # print('====>')
    
    # print(Student.__dict__)
    然后调用类来产生对象,调用类的过程又称之为实例化
    # 调用类的本质:就是产生一个与类相关联子空间
    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)
    3、__init__方法
    改进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)
    4、调用类
    (1)会先创造一个与类相关联的子空间,也就对象=》空对象
    (2)自动触发类内__init__(空对象,"egon",18,"male")
    (3)返回一个初始化好的对象,我们可以赋值给一个变量名
    stu1 = Student("egon",18,"male")
    stu2 = Student("王三炮",19,"female")
    stu3 = Student("李大炮",20,"male")

    5、类属性操作

    类与对象都可以通过.来访问属性完成增删改查的操作
    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)

    6、对象属性操作

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

    (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()

    三、内置函数

    1、eval

    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))#<class 'str'>
        line=eval(line)
        print(line['k1'])#111

    2、frozenset

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

    3、pow

    print(pow(10,3,3)) # 10 ** 3 % 3   #打印出1

    4、reversed

    l=[111,'aaa',333]
    res=reversed(l)
    print(res)#<list_reverseiterator object at 0x00000000021989D0>
    for x in res:
        print(x)#333 aaa  111
    
    l=list(reversed(l))
    print(l) #[333, 'aaa', 111]

    5、round小数部分5舍6入

    print(round(4.6))#5
    print(round(4.7))#5
    print(round(4.4))#4
    print(round(4.5))#4  超过5才进位

    6、slice切片

    l=[111,222,333,44,555,666,777,888]
    
    s=slice(0,5,2)
    
    print(l[0:5:2]) # 0 2 4  [111, 333, 555]
    print(l[s]) # 0 2 4  [111, 333, 555]
    
    msg="hello world"
    print(msg[s])#hlo

    7、sorted从小到大排序

    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)#['axx', 'zegon', 'lxx']

    8、sum求和

    print(sum([1,2,3,4]))#10

    9、zip压缩到一起

    msg1="hello"
    msg2={"name":"egon"}
    l=[111,222,333]
    
    res1=zip(msg1,l)
    print(list(res1))#[('h', 111), ('e', 222), ('l', 333)]
    res2=zip(msg2,l)
    print(list(res2))#[('name', 111)]
  • 相关阅读:
    Parse Notification for IOS
    微信回调:Activity 调用 finish()之后,该acitivity的实例并不为空
    Android Studio 使用微博SDK Demo的问题总结
    Android Activity切换动画
    分享那些坑
    TextColor java 代码
    奇怪的Bug: 点击事件穿透应用,激活桌面的另一个应用
    FragmentStatePagerAdapter VS FragmentPagerAdatper
    android:fillViewport="true"
    用两种方式获取Bitmap的不同结果
  • 原文地址:https://www.cnblogs.com/guojieying/p/13190685.html
Copyright © 2020-2023  润新知