zoukankan      html  css  js  c++  java
  • 面向对象

    初识面向对象:

    1.面向过程:

          一切一以事物的流程为核心,核心是"过程" 二字,过程是指解决问题的步骤. 

          优点:负责的问题流程化,编写相对简单    

          缺点:可扩展性差

    2.面向对象 :

           一切以对象为中心

          优点:可扩展性强    

          缺点:编程的复杂性高于面向对象

    3.面向对象如何编写:

          在代码中定义一个类

     

    4. 什么是类:

          具有相同属性和方法的一类事务(框架 模子)

          而是规范了一类物体有哪些共同的属性和方法(技能)

    5.在类中直接可以定义的内容:
             静态属性 : 这个类拥有的,所有的对象都共享的属性
             动态属性 : 方法定义在类中的函数,描述的是所有对象共享的行为

    6.类名的作用:
                        实例化的时候 对象 = 类名()
              操作静态属性

    7, 定义类的关键字 : class 类名首字母大写 

    1 class 类名:      #在代码中定义一个类
    2      pass

    8.什么是对象: 

          调用模子得到的结果 : 对象(具体的)
          根据模子的规范,填上具体的值就是一个对象了

    9.对象名的作用:
             操作对象的属性
             调用方法

    1  class Person:    # 定义一个人类    [Person 人类:po shen]
    2          pass
    3 alex=person()     #alex是一个person类的对象
                #每次创建一个新的对象都会有一个新的内存地址,也就是每个对象都拥有自己的内存地址

     10.什么是构造方法:

        构造方法是创建对象的时候自动调用的

    1 class Person:                   # 定义一个人类    [Person 人类:po shen]
    2     def __init__(self,name,sex,hp,mp,ad):  #构造方法  本身就存在的内置方法
    3 alex=person("alex","不详",10,10,0.1)     #self是一块内存空间 一调用person ,self就会自动开辟一块空间

    11.什么是属性:  

          属于对象的值 - 对象属性

    12.什么是实例 

          实例完全和对象是一样的

    13..什么是实例化:

         是由类创建对象的过程

    14..实例化的过程

          1.创建一个属于对象的空间
               2.将这个空间的地址和参数传递给__init__方法
               3.执行init方法
               4.将对象的空间返回给对象名

    1  class Person:    # 定义一个人类    [Person 人类:po shen]
    2     def __init__(self,name,sex,hp,mp,ad):   #构造方法 
    3          self.name=name     # 属性 属于对象的值 - 对象属性
    4          self.sex=sex        
    5          self.hp=hp          
    6          self.mp=mp         
    7          self.ad=ad  
    alex=person("alex","不详",10,10,0.1) #alex=self
                          #通过person类创建了一个alex对象或创建了一个alex实例  这个过程叫实例化过程  

    15.什么是方法:

        一个函数,在类当中定义函数,就是方法,方法自带self参数

     1    class Person:    #
     2        COUNTRY = '牧师'       # 静态属性类属性 属于类的 所有属于这个类的对象都共同的属性
     3       def __init__(self,name,sex,hp,mp,ad):
     4            self.name = name   # 属性 属于对象的值 - 对象属性
     5           self.sex = sex
     6            self.hp = hp
     7            self.mp = mp
     8            self.ad = ad
     9        def attack(self):     # 一个函数,在类当中定义函数,就是方法,方法自带self参数
    10                              # 动态属性

    16.方法和函数的区别?

        函数独立的 不需要传递self

        方法是写在类里面的函数 需要传递self

    17.什么是对象的属性 : 

          存储在实例化之后创建的空间中的所有变量都是对象的属性
             每一次实例化产生的空间都是独立的,每一个对象都有自己的属性值

    18.什么是动态属性:

                   定义在类中的函数,自带一个self,就是调用这个方法的对象本身

     19.什么是静态属性 : 

          所有的这个类的对象都共有的属性

     1  class Person:    #
     2      COUNTRY = '牧师'       # 静态属性类属性 属于类的 所有属于这个类的对象都共同的属性
     3     def __init__(self,name,sex,hp,mp,ad):
     4          self.name = name   # 属性 属于对象的值 - 对象属性
     5         self.sex = sex
     6          self.hp = hp
     7          self.mp = mp
     8          self.ad = ad
     9      def attack(self):     # 一个函数,在类当中定义函数,就是方法,方法自带self参数
    10                             # 动态属性
    11          print('%s发起了攻击'%self.name)
    12 
    13  alex = Person('alex','不详',10,10,0.1)
    14  如何调用attack方法?
    15  alex.attack()  # Person.attack(alex)

    20.类与对象的关系:

        类是对事物的总结,抽象的概念,类用来描述对象.对象是类的实例化的结果,对象能执行哪些方法,都由类来决定,类中定义了什么,对象就拥有什么

     21.面向对象中的self指的是什么?

        self:表示当前类的对象. 当前正在执行这个动作的对象

    22.属性的增删改查:

     1   class Person:    # 定义一个人类    [Person 人类:po shen]
     2      def __init__(self,name,sex,hp,mp,ad):   #构造方法 
     3           self.name=name     # 属性 属于对象的值 - 对象属性
     4           self.sex=sex        
     5           self.hp=hp          
     6           self.mp=mp         
     7           self.ad=ad  
     8 alex=person("alex","不详",10,10,0.1) #alex=self
     9 
    10 查看属性:
    11 print(alex.hp)
    12 增加属性:
    13 alex.level=1
    14 print(alex.level)
    15 修改属性:
    16 alex.hp=9
    17 print(alex.hp)
    18 删除属性:
    19 del alex.level   #报错  AttributeError 这属性不存在
    print(alex.__dict__) #查看alex的所有属性以一个字典的形式返回
    也可以通字典的value的值修改对属性对应的值
    alex.__dict__["name"]="alex_ss"

    人狗大战:

     class Person:    # 定义一个人类    [Person 人类:po shen]
        def __init__(self,name,sex,hp,mp,ad): #构造方法
    属性      self.name=name     # 每一个角色都有自己的昵称
             self.sex=sex      # 每一个角色都有自己的性别
             self.hp=hp       # 每一个角色都有自己的生命值
             self.mp=mp         # 每一个角色都有自己的蓝
             self.ad=ad      # 每一个角色都有自己的攻击力

         def attack(self,dog):             #方法 [attack 攻击:e tai k]
             print('%s攻击了%s'%(self.name,dog.name)) # 人可以攻击狗,这里的狗也是一个对象。
             dog.hp -= self.ad           # 人攻击狗,那么狗的生命值就会根据人的攻击力而下降

    class Dog:   # 定义一个狗类
         def __init__(self,name,kind,hp,ad): #构造方法
             self.name=name   # 每一只狗都有自己的昵称;
             self.kind=kind    # 每一只狗都有自己的品种;
             self.hp=hp         # 每一只狗都有自己的生命值;
             self.ad=ad         # 每一只狗都有自己的攻击力;

         def bite(self,Person):     # 狗可以咬人,这里的狗也是一个对象。 [bite :咬 bai t]
             print('%s咬了%s'% (self.name,Person.name))
             Person.hp  -= self.ad   # 狗咬人,那么人的生命值就会根据狗的攻击力而下降

    alex=Person("alex","男",10,80,0.1)  #创造了一个实实在在的人alex
    haha=Dog("二哈","不详",999,998,)        #创造了一只实实在在的狗haha

    print("狗的血是%s" %haha.hp)    #输出狗的血 999
    alex.attack(haha)               #alex攻击了狗
    print("二哈的血还剩%s" %haha.hp)  #狗的血剩 998.9

    print("alex的血是%s" %alex.hp)    #输出alex的血 10
    haha.bite(alex)                   #狗咬了alex
    print("alex的血还剩%s" %alex.hp)   #alex的血剩 -988

    练习1

     1 """
     2 1.写一个圆形类
     3 描述所有的圆形的 半径 周长 面积
     4 半径是属性 参数
     5 周长和面积是方法  -  根据半径计算而来的
     6 """
     7 from math import pi
     8 class Circle:           #定义了一个圆形类;提供计算面积(area)和周长(perimeter)的方法
     9     def __init__(self,radius):
    10         self.radius = radius
    11 
    12     def area(self):
    13         return pi*self.radius*self.radius
    14 
    15     def perimeter(self):
    16         return 2 * pi * self.radius
    17 
    18 circle =Circle(10) #实例化一个圆
    19 areal = circle.area() #计算圆面积
    20 per1=circle.perimeter()#计算圆周长
    21 print(areal,per1) #打印圆面积和周长

    练习2

     1 """创建⼀个武松. 武松可以打老虎, 杀嫂⼦, 替天行道"""
     2 class Haohan:
     3     def __init__(self,name,waihao,jineng):
     4         self.name=name
     5         self.waihao=waihao
     6         self.jineng=jineng
     7 
     8     def ganlaohu(self):
     9         print("%s,%s在干老虎" % (self.waihao,self.name))
    10 
    11     def shasaozi(self):
    12         print("%s,%s在杀嫂子" %(self.waihao,self.name))
    13 
    14     def titianxingdao(self):
    15         print("%s,%s在替天行道" %(self.waihao,self.name))
    16 
    17 wusong=Haohan("武松","行者","喝酒")
    18 wusong.ganlaohu()
    19 wusong.shasaozi()
    20 wusong.titianxingdao()

    练习3

     1 """⽤用⾯面向对象的思维来完成⽤用户登录. """
     2 class Account:
     3 
     4     def __init__(self, username, password):
     5         self.username = username
     6         self.password = password
     7 
     8     def login(self):
     9         if self.username == "alex" and self.password == '123':
    10             return True
    11         else:
    12             return False
    13 
    14 acc = Account("alex", "1234")
    15 print(acc.login())

      

        

  • 相关阅读:
    【Leetcode】Unique Binary Search Trees
    linux C函数之access函数的用法
    Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
    【Leetcod】Unique Binary Search Trees II
    KVM客户机使用主机USB设备
    运行Maven是报错:No goals have been specified for this build
    SQL2008R2 express版本不支持维护计划
    已超过了锁请求超时时段的原因
    Oracle免客户端InstantClient安装使用
    将存储过程的返回值赋给变量
  • 原文地址:https://www.cnblogs.com/baoshuang0205/p/9991385.html
Copyright © 2011-2022 走看看