zoukankan      html  css  js  c++  java
  • 类和对象基础

    面向对象编程介绍

    面向过程编程

    核心是“过程”二字,过程指的是做事情的步骤,即先做什么再做什么。

    基于该编程思想写程序,就好比一条工厂流水线,一种机械式的思维方式。

    优点:逻辑清晰,复杂的问题流程化,进而简单化。

    缺点:可扩展性差。

    面向对象编程

    面向对象编程的核心是对象二字,对象指得是特征与技能的结合体。基于该编程思想写程序,就好比在创造世界,一种上帝式的思维方式。

    优点:可扩展性高。

    缺点:编写程序的复杂程度远高于面向过程。

    类和对象

    什么是类?类型,分类

    先定义类,后调用类产生对象。

    • 在现实世界中:对象是一个个具体存在的事物,类是由人类文明的发展抽象总结出来的。

    • 在程序中:必须遵循先有类,再有对象

    总结:

    对象是特征与技能的结合体,类是一系列对象相同的特征与技能的结合体。

    定义类

    # 类名使用驼峰命名法
    class Student:
    	school = 'oldboy'
        def choose_course(self):
            print('choose course')
        
        def learn(self):
            print('learn')
    

    在定义类发生的事情:

    1. 类在定义时,会产生一个空的名称空间
    2. 会把类中定义的名字,扔进类的名称空间中

    注意:类在定义阶段就已经产生好了名称空间,执行python文件时会执行类内部的代码

    class Student:
    	school = 'oldboy'
        def choose_course(self):
            print('choose course')
        
        def learn(self):
            print('learn')
            
            
    print(Student.__dict__)  # 查看类的名称空间中所有名字
    
    '''
    {'__module__': '__main__', 'school': 'oldboy', 'choose_course': <function Student.choose_course at 0x0000010EF2FD3510>, 'learn': <function Student.learn at 0x0000010EFA1A0950>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
    '''
    

    对象的创建和使用

    类的操作

    class Student:
    	school = 'oldboy'
        def choose_course(self):   # self就是对象本身
            print('choose course')
        
        def learn(self):
            print('learn')
            
    print(Student.school)  # 查找
    
    Student.school = 'oldgirl'   # 修改
    print(Student.school)   
    '''
    oldgirl
    '''
    
    Student.address = '上海'  # 增加
    print(Student.address)
    
    del Student.address    # 删除
    
    
    Student.choose_course(123)  # 括号里面需要参数
    

    名称空间的产生:

    1. 类的名称空间在定义阶段就已经产生了
    2. 对象的名称空间,在调用类时产生
    class Student():
        school = 'oldboy'
    
        def choose_course(self):
            print('choose course')
    
        def learn(self):
            print('learn')
    
    
    stu1 = Student()
    stu2 = Student()
    stu3 = Student()
    
    print(stu1.school)
    stu1.choose_course()
    stu1.learn()
    

    在类内部定义__init__函数

    __init__会在调用类时自动触发该函数,为对象初始化某些属性

    class Student():
        school = 'oldboy'
    
        def __init__(self):
            print('此处是__init__')
    
    
        def choose_course(self):
            print('choose course')
    
        def learn(self):
            print('learn')
    
    
    stu1 = Student()
    stu2 = Student()
    stu3 = Student()
    
    print(stu1.school)
    stu1.choose_course()
    stu1.learn()
    

    调用类发生的事情:

    1. 首先会产生一个空的对象,就是产生“对象的名称空间”
    2. 会自动触发__init__
    3. 会把对象以及括号内的参数一并传给__init__函数
    class Student():
        school = 'oldboy'
    
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
    
        def choose_course(self):
            print('choose course')
    
        def learn(self):
            print('learn')
    
    
    stu1 = Student('cwz', 23, 'male')
    
    print(stu1.name)
    print(stu1.age)
    print(stu1.sex)
    
    '''
    cwz
    23
    male
    '''
    

    对象与类的查找顺序

    class Student():
        school = 'oldboy'
    
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
    
        def choose_course(self):
            print('choose course')
    
        def learn(self):
            print('learn')
    
    
    stu1 = Student('cwz', 23, 'male')
    
    print(stu1.__dict__)
    print(stu1.name, stu1.school)
    '''
    {'name': 'cwz', 'age': 23, 'sex': 'male'}
    cwz oldboy
    '''
    

    对象与类的查找顺序:

    1. 对象.属性,若对象本身有,则优先查找对象自己的
    2. 若对象本身没有,则去类里面找,若类里面没有,则报错

    对象绑定方法

    class Student():
        school = 'oldboy'
    
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
            print(self)
    
    
        def choose_course(self):
            print('choose course')
    
        def learn(self):
            print('learn')
    
    # print(Student.learn)
    # Student.learn(133)
    
    stu1 = Student('qwe', 20, 'male')
    stu1.learn()
    

    类内部的函数主要是给对象用的:

    1. 由类来调用类内部的函数,该函数只是一个普通的函数,普通函数需要接收几个参数就得传入几个参数
    2. 由对象来调用称之为对象的绑定方法,不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中
    3. 对象的绑定方法,是由对象来调用的,特殊之处就是把对象当作第一个参数传入该方法中
    class Student():
        school = 'oldboy'
    
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
            print('stu:', self)
    
    
        def choose_course(self):
            print('choose course')
    
        def learn(self):
            print('learn')
    
    # print(Student.learn)
    # Student.learn(133)
    
    stu1 = Student('qwe', 20, 'male')
    stu2 = Student('cwz', 21, 'male')
    stu1.learn()
    print('stu1', stu1)
    stu2.learn()
    print('stu2', stu2)
    print(stu1.learn)
    
    '''
    stu: <__main__.Student object at 0x0000019E249E2128>
    stu: <__main__.Student object at 0x0000019E249E2198>
    learn
    stu1 <__main__.Student object at 0x0000019E249E2128>
    learn
    stu2 <__main__.Student object at 0x0000019E249E2198>
    <bound method Student.learn of <__main__.Student object at 0x0000019E249E2128>>
    '''
    

    小练习

    '''
    人狗互咬大战
    '''
    
    class Person:
        def __init__(self, name, aggr, life):
            self.name = name
            self.aggr = aggr
            self.life = life
    
        # 人咬狗方法
        def bite(self, dog):
            if dog.life < 0:
                return True
            dog.life -= self.aggr
    
            print(
                f'''
                人 {self.name}咬狗 {dog.name}
                狗掉血 {self.aggr}
                狗还剩的血量 {dog.life}
                '''
            )
    
    
    class Dog:
        def __init__(self, name, dog_type, aggr, life):
            self.name = name
            self.dog_type = dog_type
            self.aggr = aggr
            self.life = life
    
        # 狗咬人方法
        def bite(self, person):
            if person.life < 0:
                return True
            person.life -= self.aggr
    
            print(
                f'''
                狗 {self.name}咬人 {person.name}
                人掉血 {self.aggr}
                人还剩的血量 {person.life}
                '''
            )
    
    
    p1 = Person('neo', 300, 400)
    d1 = Dog('大黄', '土狗', 200, 500)
    
    while True:
        flag1 = p1.bite(d1)
        if flag1:
            break
    
        flag2 = d1.bite(p1)
        if flag2:
            break
    
  • 相关阅读:
    微信小程序_(校园视)开发视频的展示页_下
    微信小程序_(校园视)开发上传视频业务
    微信小程序_(校园视)开发视频的展示页_上
    微信小程序_(校园视)开发用户注册登陆
    微信小程序_(表单组件)checkbox与label
    微信小程序_(表单组件)button组件的使用
    微信小程序_(组件)icon、text、rich-text、progress四大基础组件
    微信小程序_(组件)可拖动movable-view
    微信小程序_(组件)swiper轮播图
    微信小程序_(组件)scroll-view可滚动视图
  • 原文地址:https://www.cnblogs.com/setcreed/p/11644158.html
Copyright © 2011-2022 走看看