zoukankan      html  css  js  c++  java
  • 【0826 | Day 23】面向对象/类与对象/产生对象/一切皆对象

    面向对象

    一、面向过程编程 vs 面向对象编程

    面向过程编程:

    • 优点:流程化
    • 缺点:可扩展性差

    面向对象编程:

    • 优点:可扩展性高
    • 缺点: 编写复杂

    类与对象

    一、基本介绍

    对象:属性/方法的结合体

    类:一系列共同的属性和方法(用驼峰体表示)

    注意:在程序中,先类后对象,属性用变量表示,方法用函数表示。

    #生成对象:类加括号生成对象
    class Student()
    
    #赋变量名
    stu1 = Student()
    stu2 = Student()
    
    #获取属性和方法:通过'.'获取
    print(stu1.school)
    print(stu2.choose)  #绑定方法
    
    #查看类中的属性和方法
    print(Student.__dict__) #属性和方法丢进字典
    print(Student.__dict__['school']) #打印oldboy
    print(Student.__dict__['choose']) #打印内存地址
    Student.choose(123) #类调用加参数
    

    二、两者区别

    ---> 类

    1. 获取类的属性和方法
      • 通过类.__dict__()获取
    2. 类来调用属性和方法
      • 通过dict[' ']获取 (但比较复杂)
      • 通过类名.属性和函数 获取(传参)(对于类来说,study / choose只是函数)

    注意:打印结果为function。

    ---> 对象

    1. 获取对象的属性和方法
      • 通过对象.__dict__获取 (空字典)
    2. 对象来调用属性和方法
      • 通过对象.属性/方法获取(不传参)(对于对象来说,study/choose是方法)

    注意:打印结果为method。

    1. 对象自己的属性和方法
    stu1.Student()
    stu1.name = 'nick'
    stu1.school = 'oldgirl'  #若类要修改Student.school = 'xxx'
    print(stu1.__dict__)
    
    #{'name': nick, 'school': oldgirl}
    
    1. 向对象中添加属性

      • stu1.Student()
        stu1.name = 'nick'

      • __init__方法

        class Student:
            School = 'oldboy'
            def __init__(self,name):
                self.name = name
        

        注意:在对象实例化产生对象时,第一个参数不传参

    2. 属性查找顺序

      • 对象 ---> 类 ---> 没有就报错,例如print(stu1.oldboy)
    3. 产生对象

      stu1.Student('nick')
      stu2.Student('jason')
      
    4. 绑定方法

      • 定义在类内部的方法
      • 如果类调用,就是一个普通函数;如果对象调用,叫对象的绑定方法,第一个参数不需要传入,自动传入

    一切皆对象

    #类实例化产生对象3
    Q = [1, 2, 3]
    list.append(Q,5) #list是类,传两个参数
    
    Q = list([1, 2, 3])
    Q.append(5) #Q是具体对象,传一个参数
    

    人狗大战

    #人狗大战
    #定义一个狗类
    class Dog:
        type_dog='金毛'
        def __init__(self, name, aggr, hp=100):
            self.name=name
            self.aggr = aggr
            self.hp=hp
        def bite(self, target):
            #当期狗的攻击力:self.aggr
            #人的血量:target.hp
            target.hp-=self.aggr
            print('''
            狗的品种:%s
            %s狗咬了一下%s人,
            人掉血:%s
            人的血量剩余:%s
            '''%(self.type_dog,self.name,target.name, self.aggr,target.hp))
    #人类
    class Human:
        def __init__(self,name,aggr,hp=100):
            self.name=name
            self.aggr=aggr
            self.hp=hp
        def bite(self,target):
            target.hp-=self.aggr
            print('''
            %s人咬了一下%s狗,
            狗掉血:%s
            狗的血量剩余:%s
            '''%(self.name,target.name,self.aggr,target.hp))
    
    
    #实例化产生狗对象
    # dog1=Dog('旺财',10)
    dog1=Dog('旺旺财',10,200)
    nick=Human('nick',50)
    dog1.bite(nick)
    print(nick.hp)
    dog1.bite(nick)
    print(nick.hp)
    nick.bite(dog1)
    
  • 相关阅读:
    用phpStudy来安装织梦cms,dedecms的本地测试
    如何不给花一分钱,关键词怎么霸屏百度首页?
    关键词挖掘工具_关键词拓展工具集合
    如何用iframe在网页中插入另一个网页的一部分内容,做成页中页
    mysql数据库中如何修改已建好的表中的【列名】【列的属性】
    为了让你的网页能在更多的服务器上正常地显示,还是加上“SET NAMES UTF8”吧
    php 构造函数格式,具体该怎么写?应该注意什么呢?
    win7(64位)php5.5-Apache2.4-mysql5.6环境安装
    JS滑动
    Codeforces Round #450 (Div. 2) C. Remove Extra One 题解
  • 原文地址:https://www.cnblogs.com/fxyadela/p/11415379.html
Copyright © 2011-2022 走看看