zoukankan      html  css  js  c++  java
  • 20180723 (面向对象:类和对象)

    一.面向对象    (需要站在上帝的角度进行创建)

    1.类 : 具有相同属性和技能的一类事物           (类后面的变量需要首字母大写)

      对象:具体类的表现,具体实实在在的一个实例

    例如:

      人是一个类,张舒文是一个对象

      狗是一个类,球球是一个对象

    面向对象的例子:

      类主要分为两个方面:1.变量部分(静态变量/静态字段)

                2.方法部分(函数部分/动态变量)

    例如:

      class Person:

        mind = "有思想"

        money = "可以使用货币"                      =======>这三个部分是静态变量/静态字段

        farith = "有信仰"

        def __init__(self,name,age,sex,hobby):

          self.name = name

          self.age = age

          self.sex = sex

          self.hobby = hobby                                     ===========>这四个def是动态变量(函数/方法)

        def.work(self):

          print("可以工作")

        def.eat(self):

          print("可以吃饭")

        def.sleep(self):

          print("可以睡觉")

      p1 = Person("刘某某",22,"女","美食")

      p2 = Person("张某某",22,"男","小说")

    2.类名的角度

      操作类中的静态变量:

       1.Person.__dict__[]    查询类中的所有内容   (最好查询所有的,不查单个的内容)

        括号里面可以通过key值找到value的值      (这个打印出来的数据类型是字典)

       2.万能的点  "."   (对类中单个的变量进行增删改查)

        (1)例如:

          print(Person.mind)     =====>打印出来是"有思想"           查

        (2)例如:

          Person.animal = "高级动物"                =======>在静态变量中增加一项                    增

          print(Person.__dict__)            =====>可以查询到那一项有没有被增加到里面

        (3)例如:

          Person.mind = "无思想"                      =========如果静态变量中存在mind  则是为它重新赋值                  改

        (4)例如:

          del  Person.mind

          print(Person.__dict__)                         =========>查询那一项有没有被删除                                 删

      操作类中的方法:     (工作当中基本不用类命去操作)

        除了类方法,静态方法,需要类名调用之外,剩下的方法都要对象调用

    3.对象的角度

      Person()              类名+()过程则是实例化的过程(创建一个对象的过程)

              Person()   实例化对象,实例,对象

       只要类名+()产生一个对象,自动执行类中的__init__方法

        例如:

          def __init__(self,name,age,sex,hobby):                     ========>这个方法叫做构造方法

            print(name,age,sex,hobby)

          Person("张某某",22,"男","小说")                                   打印出来的效果是======>张某某  22  男  小说

        (1)类名+()  产生一个实例(对象/对象空间/实例空间)

        (2)自动执行类中的__init__方法,并且将对象空间传给__init__的self参数

        (3)给对象封装相应的属性   (执行具体的__init__代码)

          例如:

            def __init__(self,name,age,sex,hobby):

              self.name = name

              self.age = age

              self.sex = sex

              self.hobby = hobby

       操作对象中的静态变量

        1.__dict__查询对象空间中所有的内容

        2.万能的点   "."  

          (1)例如:

            print(p1.name)   =====>刘某某                               查

          (2)例如:

            p1.height = 170

            print(p1.__dict__)                    =======>字典里多了一项身高height            增

          (3)例如:

            del p1.name

            print(p1.__dict__)                     =======>字典里少了一项name的键值对                             删

          (4)例如:

            p1.age = 23

            print(p1.__dict__)                          ======>将age这一项的值改为23                                                  改

        对象操作类中的静态变量:

          只能查询   

            例如:  print(p1.mind)

        对象调用类中的方法:  (工作中通过对象执行类中的方法,而不是通过类名)

          例如:

            p1.work()

          也可以在其他方法中调用属性;

          例如:

            def func(self):

              self.height = 170

            p1.func()

            print(p1.__dict__)

     追加:

      内存地址加()可以执行     不过要括号里传个参数

      例如:   

    class Person:
    mind = "有思想"
    money = "可以使用货币"
    faith = "有信仰"
    def __init__(self, name, age, sex, hobby,faith):
    self.name = name
    self.age = age
    self.sex = sex
    self.hobby = hobby
    self.faith = faith
    def work(self):
    print("%s可以工作,自给自足" % self.name)
    def eat(self):
    print("可以吃到很多美食")
    def language(self):
    print("%s可以学习很多语言" % self.name)
    def func(self):
    faith = "没有信仰"
    p1 = Person("刘某某", 22, "女", "吃","无")
    p2 = Person("张某某", 22, "男", "看小说","有信仰")
    p3 = Person("刘某",23,"女","睡觉","没有")
    print(Person.eat(111))

     

    作业:

    第一题:

    完成下列功能:
      1.1创建一个人类Person,再类中创建3个静态变量(静态字段)
        animal = '高级动物'
        soup = '有灵魂'
        language = '语言'
      1.2在类中定义三个方法,吃饭,睡觉,工作.
      1.3在此类中的__init__方法中,给对象封装5个属性:国家,姓名,性别,年龄,  身高.
      1.4实例化四个人类对象:
        第一个人类对象p1属性为:中国,alex,未知,42,175.
        第二个人类对象p2属性为:美国,武大,男,35,160.
        第三个人类对象p3属性为:你自己定义.
        第四个人类对象p4属性为:p1的国籍,p2的名字,p3的性别,p2的年龄,p3  的身高.
      1.5 通过p1对象执行吃饭方法,方法里面打印:alex在吃饭.
      1.6 通过p2对象执行吃饭方法,方法里面打印:武大在吃饭.
      1.7 通过p3对象执行睡觉方法,方法里面打印:(p3对象自己的名字)在吃饭.
      1.8 通过p1对象找到Person的静态变量 animal
      1.9 通过p2对象找到Person的静态变量 soup
      2.0 通过p3对象找到Person的静态变量 language

    class Person:
    animal = "高级动物"
    soup = "有灵魂"
    language = "语言"
    def __init__(self,country,name,sex,age,hight):
    self.country = country
    self.name = name
    self.sex = sex
    self.age = age
    self.hight = hight
    def work(self):
    print("%s在工作" % self.name)
    def eat(self):
    print("%s在吃饭" % self.name)
    def sleep(self):
    print("%s在睡觉" % self.name)

    P1 = Person("中国","alex","未知",42,175)
    P2 = Person("美国","武大","男",35,160)
    P3 = Person("葡萄牙","C罗","男",33,185)
    P4 = Person(P1.country,P2.name,P3.sex,P2.age,P3.hight)
    r1 = P1.eat()
    r2 = P2.eat()
    r3 = P3.sleep()
    print(P1.animal)
    print(P2.soup)
    print(P3.language)
    print(P1.__dict__)
    print(P2.__dict__)
    print(P3.__dict__)
    print(P4.__dict__)

    第二题:

    通过自己创建类,实例化对象
      在终端输出如下信息
      小明,10岁,男,上山去砍柴
      小明,10岁,男,开车去东北
      小明,10岁,男,最爱大保健
      老李,90岁,男,上山去砍柴
      老李,90岁,男,开车去东北
      老李,90岁,男,最爱大保健
      老张

    class Person:
    def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
    def work1(self):
    print("%s,%s.%s,上山砍柴去" % (self.name,self.age,self.sex))
    def work2(self):
    print("%s,%s,%s,开车去东北" % (self.name,self.age,self.sex))
    def work3(self):
    print("%s,%s,%s,最爱大保健" % (self.name,self.age,self.sex))
    P1 = Person("小明","10岁","男")
    P2 = Person("老李","90岁","男")
    r1 = P1.work1()
    r2 = P1.work2()
    r3 = P1.work3()
    r4 = P2.work1()
    r5 = P2.work2()
    r6 = P2.work3()

    第三题:

    模拟英雄联盟写一个游戏人物的类(升级题).
      要求:
      (1)创建一个 Game_role的类.
      (2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.
      (3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:
          : 实例化一个对象 盖伦,ad为10, hp为100
          实例化另个一个对象 剑豪 ad为20, hp为80
          盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血,  还剩多少血'的提示功能.

    class Game_role:
    def __init__(self,name,ad,hp):
    self.name = name
    self.ad = ad
    self.hp = hp
    def attack(self,p):
    p.hp = p.hp - self.ad
    print("%s攻击了%s,%s掉了%s血,还剩%s血" % (self.name,p.name,p.name,self.ad,p.hp))
    P1 = Game_role("盖伦",10,100)
    P2 = Game_role("剑豪",20,80)
    r1 = P1.attack(P2)
     
  • 相关阅读:
    idea导入项目没有run方法,是java文件
    idea好用的插件
    各种路径
    HandlerInterceptorAdapter
    自定义httpservletrequest解析参数
    idea类存在找不到解决办法
    坦言spring中事务、重试、异步执行注解
    IntelliJ IDEA 超实用使用技巧分享
    mysql插入数据频繁出现坏表
    在开发中进入一个方法后想要到原来那行 ctrl+alt+左 回到上一步 ctrl+alt+右 回到下一步
  • 原文地址:https://www.cnblogs.com/lhy979/p/9360327.html
Copyright © 2011-2022 走看看