zoukankan      html  css  js  c++  java
  • python---类

    面向过程
    一个面向过程的程序是一步步执行程序的模块,代码,模块代码之间有很强的关联性

    面向对象
    类,对象

    类的特点:
    继承,封装,多态
    对象:
    类实例化后的对象

    多态:一种接口,多种形态

    把一个类变成一个具体的对象的过程叫实例化
    类变量的用途:
    实例公用的变量,节省内存


    属性
    实例变量
    类变量
    私有属性
    方法
    构造方法,初始化实例化使用
    析构函数

    继承:
    单继承
    多继承
    组合(即在构造函数中一个类中直接调用另一个类)

    析构函数
    在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作,如关闭一些数据库连接打开的临时文件

    私有方法、私有属性
    只有自己能够访问


    广度优先和深度优先
    广度优先是同一层次的优先处理
    深度优先是将第一个进行深度处理

    python 2 中,经典类是按着深度优先来继承,新式类是按广度优先来继承的
    python 3 中,经典类和新式类都是统一按广度优先来继承的

    类的初步实现:
     1 # -*- coding:utf-8 -*-
     2 # LC
     3 
     4 
     5 class Role:
     6     number = 123   #类变量
     7     test_list = []
     8     def __init__(self,name,role,weapon,life_value=100,money=15000):
     9         #构造函数
    10         #在实例化时做一些类的初始化工作
    11         self.name = name            #实例变量(静态属性),作用域就是实例本身
    12         self.role = role
    13         self.weapon = weapon
    14         self.__life_value = life_value      #私有属性
    15         self.money = money
    16     def show_status(self):
    17         print("%s life value is %s"%(self.name,self.__life_value))  #通过调用类的函数进行查看私有属性
    18     def __show(self):   #私有方法,加两个_
    19         pass
    20 
    21     def __del__(self):
    22         #析构函数
    23         print("%s is die!!!"%self.name)
    24 
    25     def shot(self):#类的方法、功能,(动态属性)
    26         print("%s shoting..."%self.name)
    27 
    28     def got_shot(self):
    29         print("%s got shoting"%self.name)
    30 
    31     def find_role(self):
    32         print("%s role is %s"%(self.name,self.role))
    33 
    34     def buy_gun(self,gun_name):
    35         print("%s is buying %s"%(self.name,gun_name))
    36 #类实例化
    37 
    38 r1 = Role("LC","Terrorist","AK47")          #实例化,生成一个角色,又叫做Role这个类的实例
    39 r1.shot()
    40 r1.buy_gun("M4A1")
    41 r2 = Role("xm","good guy","m4a1")
    42 #实例变量优先于类变量
    43 
    44 r1.bullet_prove = True      #可新增实例变量
    45 r1.name = "hell"            #修改实例变量
    46 del r1.name                 #删除实例变量
    47 
    48 r1.number = "改类变量"      #改变r1的类变量,只对r1有效
    49 
    50 #私有属性查看方法
    51 r1.show_status()
    52 
    53 r1.test_list.append("from r1")
    54 r2.test_list.append("from r2")
    55 
    56 
    57 print(r1.name,r1.number)

    类的继承

     1 #class People:  经典类
     2 #class People(object):  新式类
     3 
     4 class People(object):
     5 
     6     def __init__(self,name,age,):
     7         self.name = name
     8         self.age = age
     9 
    10     def eat(self):
    11         print("%s is eating"%self.name)
    12 
    13     def sleep(self):
    14         print("%s is sleeping"%self.name)
    15 
    16     def talk(self):
    17         print("%s is talking"%self.name)
    18 
    19 class Relation(object):     #新式类
    20     def make_friends(self,obj):
    21         print("%s is trying to make friends with %s"%(self.name,obj.name))
    22 
    23 class Man(People,Relation):      #继承父类,多继承
    24     def __init__(self,name,age,money):      #对构造函数进行重构
    25         People.__init__(self,name,age)      #继承父类的参数继承
    26         #super(Man,self).__init__(name,age)  继承父类的构造函数,与People.__init__(self,name,age)一样,新式类写法
    27         self.money = money
    28         print("%s born with %s money"%(self.name,self.money))
    29 
    30     def piao(self):
    31         print("%s is piaoing"%self.name)
    32 
    33     def sleep(self):            #更新,重构父类方法
    34         People.sleep(self)
    35         print("man sleeping ,update")
    36 
    37 class Women(People,Relation):   #多继承,多继承在实例在实例化过程中,查找构造函数的时候,先从本类找,如果没有,再从父类找,多继承的话,从继承的父类按左至右找
    38 
    39     def get_birth(self):
    40         print("birth")
    41 
    42 m1 = Man("LC",16,100)
    43 m1.eat()
    44 
    45 w1 = Women("Pxm",11)
    46 
    47 m1.make_friends(w1)

    类的多态

     1 class Animal(object):
     2     def __init__(self,name):
     3         self.name = name
     4     @staticmethod           #使用装饰器配合实现
     5     def animal_talk(obj):  # 多态的实现方式,一种接口,多种形态
     6         obj.talk()
     7 
     8 class Dog(Animal):
     9     def talk(self):
    10         print("%s is Wooling"%self.name)
    11 
    12 class Cat(Animal):
    13     def talk(self):
    14         print("%s is Mewing"%self.name)
    15 
    16 D1 = Dog("dog1")
    17 C1 = Cat("cat1")
    18 
    19 D1.talk()
    20 C1.talk()
    21 
    22 def animal_talk(obj):       #多态的实现方式,一种接口,多种形态
    23     obj.talk()
    24 
    25 animal_talk(D1)
    26 animal_talk(C1)
    27 
    28 Animal.animal_talk(D1)
    29 Animal.animal_talk(C1)
    类的多态




  • 相关阅读:
    图,深度,广度优先遍历(一)
    java实现快速排序
    图,深度,广度优先遍历(二)
    图,深度,广度优先遍历(三)
    Jpa动态多表if多条件联合查询(if中包含list不为null和“=”的判断),并对查询结果进行分页
    SpringBoo启动报错:Failed to load property source from location ‘classpath:/bootstrap.yml‘
    Java对象创建和Javabean创建
    Linux解压命令
    BDD测试利器:mocha+should.js
    《老码识途》读书笔记:第一章(中)
  • 原文地址:https://www.cnblogs.com/clv5/p/7359799.html
Copyright © 2011-2022 走看看