python类的命名空间与组合

枫铃4年前 (2021-06-26)Python269

一、类的命名空间

定义:我们在创建一个类的时候就会创建一个类的命名空间,用来存储类中定义的所有的名字,这些名字称为类的属性

  • 类的属性有两种形式:静态属性和动态属性

  • 静态属性就是在类中定义的变量

  • 动态属性就是定义在类中的方法

在调用上我们需要注意的是对象可以调用类中的属性,但是类名不可以调用对象的属性,由于对象和类之间存在一个关联关系所以对象能够找到类,但是类不能找到对象

使用方法:

  • 类名.属性 只会寻找类中的静态变量名字

  • 对象.属性 会先在对象自己的命名空间中找名字,如果找不到在到类的内存空间中去找;

二、类的组合

什么叫组合:一个类的对象的属性是另一个类的对象,且两个类之间有一种“什么有什么的关系”

组合的例子如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#!/usr/bin/python
# -*- encodeing:utf-8 -*-
class  Weapon:
    def __init__(self,*args):
        self.name = args[0]
        self.price = args[1]
        self.aggr = args[2]
        self.defense = args[3]
    def kill(self,person,dog):
        print('%s使用了%s技能,击中了%s'%(person.name,self.name,dog.name))
        dog.hp -= self.aggr
        if dog.hp <= 0:
            print('%s被一刀致命'%dog.name)
        else:
            print('%s攻击了%s一次,%s掉了%s血,%s还剩%s血'%(person.name,dog.name,dog.name,self.aggr,dog.name,dog.hp))
class Dog:
    def __init__(self,*args):
        self.name = args[0]
        self.kind = args[1]
        self.aggr = args[2]
        self.hp = args[3]
    def bite(self,person):
        person.hp -= self.aggr
        if person.hp  <= 0:
            print('%s咬了%s,%s被咬死了'%(self.name,person.name,person.name))
            a = input('复活请输入1:')
            if  a == '1':
                b = int(input('请输入充值金额:'))
                if b > 10000:
                    person.hp = 600
                    person.momey = b - 10000
                    print('复活成功,当前血量%s,当前账户余额%s' % (person.hp, person.momey))
        else:
            print('%s咬了%s,%s掉了%s血,%s还剩%s血'%(self.name,person.name,person.name,self.aggr,person.name,person.hp))
class Person:
    def __init__(self,*args):
        self.name = args[0]
        self.sex = args[1]
        self.aggr = args[2]
        self.hp = args[3]
        self.momey = args[4]
        self.weap = args[5]
    def atter(self,dog):
        dog.hp -= self.aggr
        if self.momey >= 2000:
            c = input('是否购买武器,按1购买')
            if c == '1':
                self.momey -= weapon.price
                self.weap = weapon
                print('购买成功,当前余额%s,当前武器%s' % (self.momey, self.weap.name))
                ren.weap.kill(ren,hei)
        if dog.hp >=0 :
            print('%s打了%s,%s掉了%s血,%s还剩%s血'%(self.name,dog.name,dog.name,self.aggr,dog.name,dog.hp))
weapon = Weapon('打狗棍',20000,40000,100)
hei = Dog('小黑','teddy',200,200000)
ren = Person('alex','男',1000,600,0,weapon)
flag = True
while flag:
    if ren.hp <= 0 or hei.hp <= 0:
        break
    ren.atter(hei)
    hei.bite(ren)

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。