zoukankan      html  css  js  c++  java
  • python学习,day5:面向对象

    面向对象介绍

    世界万物,皆可分类

    世间万物,皆为对象

    只要是对象,就肯定属于某种品类

    只要是对象,就肯定有属性

    例子:

    人:思考,说话,吃喝拉撒。

    特性:

    class类

    一个类及时对一类拥有相同属性的抽象、蓝图、原型。在类中定义了这些对象的都具有的属性(variables(data)),共同方法

    object对象

    一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之间有共性,亦有不同。

    封装

    在类中对数据的赋值,内部调用外部用户是透明的,这使类变成了一个胶囊或器官,里面包含着累的数据和方法。

    继承

    一个类可以派生出子类,在这个父类里定义的属性,方法自动被子类继承

    多态

    一个接口,多种实现

    语法:

    属性

    方法

    构造函数

    析构函数

    在实例释放、销毁的释藏执行的,通常用于做一些收尾工作,

    私有方法,私有属性 

    类变量

    类变量的用途,大家共用的属性,节省开销

    class Person:

      cn = '中国'

      def __init__(self,name,age,addr,cn = 'china')

      self.name =name

      self.cn =cn

    p1 =Person(name,age,addr)

    实例变量

    # coding=utf-8
    # Author: RyAn Bi
    class Dog:             #定义类
        def __init__(self,name):  #构造函数,在实例化时做一些初始化的工作
            self.name =name
        def bulk(self):
            print('%s is a dog'%self.name)
    
    
    d1= Dog('a')       #实例化(初始化一个类,造了一个对象)
    d2 = Dog('b')
    d3 = Dog('c')
    
    d1.bulk()
    d2.bulk()
    d3.bulk()

    下面模拟了一个CS游戏的代码,看备注

    # coding=utf-8
    # Author: RyAn Bi
    
    class Role:
        n = 123  #类变量
        n_list = [] #定义一个类变量,列表格式
        name = '我是类name'
        def __init__(self,name,role,weapon,life_value=100,money=15000,):
            #构造函数
            #在实例化时做一些类的初始化的工作
            self.name = name  #实例变量(静态属性),作用域就是实力本身
            self.role = role
            self.weapon = weapon
            self.__life_value = life_value  #私有属性,只能在内部访问
            self.money = money
        def __del__(self):     #最后执行,析构函数,对象结束和消失或者删除或者程序退出的时候执行。
            print('%s is deaded..'%self.name)
        def shot(self):   #类的方法,功能(动态属性)
            print('shooting!!!!')
        def __shot1(self):   #私有方法,不能直接调用
            print('shooting!!!!')
        def got_shot(self):
            self.__life_value -= 50
            print('%s:ah..,I got shot..'%self.name)
    
        def buy_gun(self,gun_name):
            print('%s just bought %s'%(self.name,gun_name))
        def show_status(self):     #定义一个函数,可以调用私有属性
            print('name:%s weapon:%s life:%s:'%(self.name,self.weapon,self.__life_value))
    r1 = Role('Alex','Police','AK47')     #生成一个角色,把一个类变成一个具体对象的过程,叫实例化
    r2 = Role('Jack','Terrioist','UZI')     #生成一个角色,把一个类变成一个具体对象的过程,叫实例化
    r1.got_shot()
    r1.buy_gun('uzi')
    r1.name = 'bb'    #添加一个实例变量,会覆盖以前的
    r1.bullet_prove = True   #添加了一个之前没有的实例变量,是可以添加的
    #del r1.weapon  #可以删除实例变量
    r1.n = '改类变量'   #可以改r1的类变量(实际上是创造了一个实例变量),但r2不改变
    print('r1:',r1.n,r1.name,r1.bullet_prove)    #n是类变量,是123,虽然类变量也有name,但是实例本身的name优先级更高
    print('r2:',r2.n,r2.name)   #r2.n不变,因为前面只是改变了r1的n,属于实例变量
    print(Role.n)
    Role.n = 'abc'
    print(r1.n,r2.n)     #r1.n,仍然是实例变量优先,但r2.n是改变的,因为没有实例变量
    r1.n_list.append('from r1')
    r2.n_list.append('from r2')
    print(r2.n_list)   #n_list 共用内存地址,所以列表是改谁都全改
    print(r2.money,r2.weapon)  #r1.weapon 已经删除
    #print(r1.__life_vaule)     #私有属性,不能直接调用,会报错
    print(r1.show_status())    #私有属性,只有定义才能看见
  • 相关阅读:
    javaScript设计模式:装饰模式
    搭建自动签到服务
    Gmail邮箱注册
    springcloud3(六) 服务降级限流熔断组件Resilience4j
    PCB
    行业_激光
    Git设置Http代理,克隆github上的代码
    工控机与运动控制卡
    锂电池生产工艺
    PCB涂胶工艺
  • 原文地址:https://www.cnblogs.com/bbgoal/p/11685226.html
Copyright © 2011-2022 走看看