zoukankan      html  css  js  c++  java
  • Python:面向对象初识

     面向对象初识

    什么是类?

      类即类别、种类,是面向对象设计最重要的概念,对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体

    那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看

    在现实世界中:先有对象,再有类

      世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,如人类、

    动物类、植物类等概念也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在

    什么是对象?
      对象,就是基于类而创建的一个具体的存在事物

    利用嵌套函数的方式实现面向对象

    实例1:

    def dog(name,sex,type):
        def init(name,sex,type):
            dog1={
                'name':name,
                'sex':sex,
                'type':type,
                'jiao':jiao,
                'chis':chis,
            }
            return dog1
        def jiao(dog):
            print('一只狗[%s],在叫汪汪汪' %dog['name'])
        def chis(dog):
            print('一只狗[%s],在吃屎' %dog['name'])
        return init(name,sex,type)
    d1=dog('lala','man','tesla')
    d2=dog('bobi','','te1')
    d1['jiao'](d1)
    d2['chis'](d2)

    实例2

    def people(name,sex,age):
        def init(name,sex,age):
            human={
                'name':name,
                'sex':sex,
                'age':age,
                'say':say,
                'dead':dead,
            }
            return human
        def say(xxx):
            print('Human %s sex:%s 正在说话' %(xxx['name'],xxx['sex']))
    
        def dead(xxx):
            print('Human %s age:%s 已经死了' %(xxx['name'],xxx['age']))
        return  init(name,sex,age)
    p1=people('亚瑟','','40')
    p2=people('大鸡','','19')
    p1['say'](p1)
    p2['dead'](p2)

    由上面两个实例可以看出,面向对象设计,并不仅仅是通过class定义一个类然后生成实例,才叫做面向对象。

    Python中的类

    实例1

    class Person:  # class 关键字,定义了一个类
        '''
        类里面的所有内容
        '''
        animal = '高级动物'  # 静态变量
        soup = '有思想'     # 静态变量
    
        def __init__(self,name,sex,eye,high,weight,):  # 构造方法,每次实例一个对象都会执行构造方法
    
            self.eye = eye  # 属性
            self.name = name
            self.sex = sex
            self.high = high
            self.weight = weight
            print(666)
    
        def work(self):    #动态变量,动态方法,方法
            print(self)
            # self.job = 'IT'
            print('人会工作....')

    我们就通过这个类的实例来学习下,Python中关于类的操作

     类如何调用查看静态变量,动态变量

    类操作静态变量有两种方式:

    1,类名.__dict__方法  只能查看,不能增删改。
    print(Person.__dict__)
    print(Person.__dict__['animal'])    
    Person.__dict__['name'] = 'alex'       #这样是使用会报错
    
    2,类名.变量名  可增删改查
    print(Person.animal)
    print(Person.soup)                      #查看
    Person.kind = '有性格'                   #增加
    Person.animal = '低等动物'               #修改
    del Person.kind                         #删除
    
    一般你想查询全部的静态变量时,用__dict__ 其他全部都用类名.变量名。

    类操作方法(动态变量)有两种方式:

    1,类名.__dict__[方法名]()
    print(Person.__dict__['work'](11))
    
    2,类名.方法名
    Person.work(11)
    类操作方法:类名.方法名()
    只要创建一个类,里面的内容就已经加载到内存。

    创建对象

    类名() 实例化一个对象。实例化对象:类名()过程就叫做实例化。
    p1 = Person() # p1 对象
    p2 = Person()

    只要实例化一个对象,自动触发__init___
    内部进行三步:
      1,实例化一个对象,在内存中产生一个对象空间。
      2,自动执行init方法,并将这个空间对象。 <__main__.Person object at 0x0000000001F5ABE0> 传给self
      3,通过构造方法里的代码给空间对象添加一些属性,并返回给对象。

    对象如何调用查看静态变量,动态变量,属性

    对象操作属性变量有三种方式:

    1,对象.__dict__方法  只能查看,不能增删改。
    print(p1.__dict__)
    
    2,对象.变量名  可增删改查
    print(p1.name)
    print(p1.eye)
    p1.color = '黄皮肤'
    print(p1.color)
    print(p1, type(p1))
    
    3,可以访问类的静态变量
    print(p1.__dict__)
    print(p1.animal)
    print(p1.soup)
    
    # 一般你想查询全部的静态变量时,用__dict__ 其他全部都用类名.变量名。

    对象操作方法有两种方式:

    1,对象.方法名()
    p1.work()
    print(p1)
    print(p1.__dict__)
    
    2,类名.方法名(对象)
    Person.work(111)
    Person.work(p1)

    关于类空间与对象空间

    通过实例化对象查找属性,先从对象空间找,没有则通过类对象指针从 类空间找。

    组合

    组合:给一个类对象的属性 封装 另一个类的对象。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    #组合:给一个类对象的属性 封装 另一个类的对象。
    
    class Game_person:
        def __init__(self,nickname,sex,hp,ad):
            self.nickname = nickname
            self.sex = sex
            self.hp = hp
            self.ad = ad
        def attack(self,p):
            p.hp -= self.ad
            print('%s攻击了%s,%s还剩%s血量'%(self.nickname,p.nickname,p.nickname,p.hp))
    
        def weapon_attack(self,武器):
            self.武器 = 武器 #斧子对象
    
    class Weapon:
        def __init__(self,name,ad):
            self.name=name
            self.ad=ad
    
        def fight(self,p1,p2):
            p2.hp -= self.ad
            print('%s使用%s打了%s%s血,%s还剩%s滴血'
                  %(p1.nickname,self.name,p2.nickname,self.ad,p2.nickname,p2.hp))
    
    ts = Game_person('泰森','',200,50)
    barry = Game_person('太白','',100,10)
    fuzi = Weapon('斧子',60)
    # wea.fight(barry,ts) 这样写不好,主体应该是人
    # ts.attack(barry)
    # barry.attack(ts)
    barry.weapon_attack(fuzi)    #将fuzi对象传给了weapon_attack方法
    # barry对象调用weapon_attack方法,
    # 方法执行的是将斧子对象wea封装到barry对象的属性中、
    # barry.武器 相当于 wea
    barry.武器.fight(barry,ts)
  • 相关阅读:
    “嫦娥一号”探月卫星成功发射
    优化SQL Server数据库查询(转)
    虚拟网络连接设置
    字符串分割自定义函数(SQL)
    做程序的劫客
    Linux学习笔记12我的第一个C程序
    C#学习笔记——25个经典问题
    C#学习笔记——回调机制
    C#学习笔记——TCP通讯
    halcon学习笔记——实例篇(2)长度和角度测量
  • 原文地址:https://www.cnblogs.com/bailo/p/9193236.html
Copyright © 2011-2022 走看看