zoukankan      html  css  js  c++  java
  • python摸爬滚打之day15----初识类

    1、面向对象和面向过程

      面向过程: 以事物的流程为核心.  优点: 负责的事物流程化, 编写简单; 缺点: 可拓展性差.

      面向对象: 一切以对象为核心. 对象里封装着一切. 优点: 可拓展性强; 缺点: 编写难度高.

    2、类和对象

      类是对事物的总结, 是属性和方法的结合体.

      对象是类的实例化结果. 对象里面可封装各种属性(方法是放在类的内存地址里的, 对象里是没有方法的)

      两者关系: 类是对事物的总结, 对象是类实例化的结果, 对象能执行那些方法, 都由类决定. 

    3、类的创建过程? 

     1 class Info:
     2     def __init__(self,name,passwd,gender,age):   #  self 是实例化对象时执行__init__()方法系统自己产生的一个对象,self和
     3         self.name = name                          # Info()是同一个对象, 哪个对象在调用,self就是那个对象
     4         self.passwd = passwd
     5         self.gender = gender
     6         self.age = age
     7 
     8     def login(self,nm,pw):
     9         if nm == self.name and pw == self.passwd:
    10             print("您已登陆成功")
    11         else:
    12             print("用户名或密码不对")
    13 
    14 cus = Info("达文西","dwx123","","45")    # 类的实例化结果. 类在实例化前要先执行__init__()方法,然后再有的结果.
    类的实例化

    4、类的三大特征

     4.1、封装: 

        把很多数据(包括一些属性或方法等)封装在对象里, 然后通过这个对象来调用这些属性或方法(静态方法、类方法、静态字段除外). 

     1 class ShangDan:
     2     def __init__(self,name,attact,weapon,point):   # 实例化对象时把实例化的参数(名字,攻击,武器,关键点)传进来,并封装
     3         self.name = name                           # 在self这个对象中;  将do()这个方法也封装在的self中
     4         self.attact = attact
     5         self.weapon = weapon
     6         self.point = point
     7 
     8     def do(self):           # 普通方法, 只能由对象调用, 不能用类名直接调用.            
     9         print("%s可以用%s上阵杀敌!" %(self.name,self.weapon))
    10 
    11 h = ShangDan("盖伦","物理攻击","大保剑","草丛蹲人")
    12 h.do()  
    封装

     4.2、继承  -----> 单继承(继承一个父类);  多继承(继承多个父类)

          子类继承父类, 则可以使用父类中非私有属性或方法外的内容.

         什么情况下要继承类呢?

          两个类有相同的功能或特征时 可以采用继承的方式. -----> 可以避免写重复代码或重复写方法.

     1 class F_class1:
     2     def func(self):
     3         print("我是父类1的方法")
     4 
     5 class F_class2:
     6     def func(self):
     7         print("我是父类2的方法")
     8 
     9 class S_class(F_class2, F_class1):    # 多继承, 查找顺序按照继承顺序先后, 先F_class1, 后F_class2.
    10     def func(self):
    11         print("我是子类的方法")
    12 
    13 
    14 s = S_class()
    15 s.func()     # 子类在执行func()时自身优先,自身有func()执行完停止,
    16             # 没有的话往上找, 找到F_class2, 有则执行完就停止, 没有的话再找F_class1,直到找到为止.
    继承

     4.3、多态  ----> python自带多态

        在python中, 声明一个变量时是不需要声明该变量的数据类型的.

          python中, a = 25 , 也可以重新给a 赋一个"25"字符串, 是不会报错的.

          其他语言中, int a = 25 , 声明a 是一个整形, 不允许给a 赋予除整形以外的其他值.

     1 class Animal:
     2     def chi(self):
     3         print("所有的动物都能自主吃食")
     4 
     5 class Dog(Animal):
     6     def chi(self):
     7         print("狗会吃东西")
     8 
     9 class Cat(Animal):
    10     def chi(self):
    11         print("猫会吃东西")
    12 
    13 class Elephant(Animal):
    14     def chi(self):
    15         print("大象会吃东西")
    16 
    17 class Worker():
    18     def act(self,ani):
    19         ani.chi()    # 只要包含了chi()这个功能的所有对象都可以执行. ----> 也叫作鸭子模型(只要有鸭子的特征都是鸭子)
    20                      # 并不是说Worker类只有Worker对象(w)才能调用. 
    21 
    22 d = Dog()
    23 c = Cat()
    24 e = Elephant()
    25 w = Worker()
    26 w.act(d)
    27 w.act(c)
    28 w.act(e)
    多态

     5、类的产生

  • 相关阅读:
    整理打印PI值
    使用自连接、for xml path('')和stuff合并显示多行数据到一行中(转)
    ThinkPHP+jQuery EasyUI Datagrid查询数据的简单处理
    ThinkPHP学习(三)
    Apache+PHP配置PATHINFO的一个小问题
    ThinkPHP学习(二)
    接口签名工具类
    RSA加密和解密工具类
    kafka项目中踩到的一个坑(客户端和服务器端版本不一致问题)
    自己实现字符串转整数(不使用JDK的字符串转整数的方法)
  • 原文地址:https://www.cnblogs.com/bk9527/p/9917452.html
Copyright © 2011-2022 走看看