面向对象,类名称空间,查找顺序,组合

# 程序从上往下一次把类的静态变量和方法全部加载进一个内存空间,直到遇到类名加括,实例化对象的时候会新开辟一个内存空间,# (会有一个类对象指针)在对象里面没找到目标会根据指针,去类里面找

# 查询顺序:#     对象.属性:先从对象空间找,如果找不到,再从类空间找,再找不到再从父类找#     类名.属性:先从本类空间找,如果找不到,再从父类找
类名称空间:在定义类的时候会开辟一个空间,这个空间里面装着所有的类class Person:
    animal=‘高级动物‘
    soul=‘有灵魂‘
    language=‘语言‘
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def eat(self):
        print(‘%s,在吃饭‘ % (p1.name))
p1=Person(‘张三‘,18,‘男‘)
print(p1.language)    #先从对象空间找,没有找到在去类空间找

组合:

# 组合:给一个类的对象封装一个属性,这个属性是另一个类的对象
# 3,模拟英雄联盟写一个游戏人物的类(简单的封装).#   要求:#   (1)创建一个 Game_role的类.#   (2) 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.#   (3) 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:#       例: 实例化一个对象 盖伦,ad为10, hp为100#       实例化另个一个对象 剑豪 ad为20, hp为80#       盖伦通过attack方法攻击剑豪,此方法要完成 ‘谁攻击谁,谁掉了多少血,  还剩多少血‘的提示功能.

class Game_role:    def __init__(self,name,ad,hp):        self.name = name        self.ad = ad        self.hp = hp    def attack(self,p):        p.hp=p.hp-self.ad        print(‘%s攻击%s,%s掉了%s血,还剩%s血‘ % (self.name,p.name,p.name,self.ad,p.hp))p1=Game_role(‘盖伦‘,10,100)p2=Game_role(‘剑豪‘,20,80)p1.attack(p2)
 
(升级)
class Game_role:
    def __init__(self,name,ad,hp):
        self.name = name
        self.ad = ad
        self.hp = hp
    def men_weapon(self,we):    #定义一个封装武器的方法(接收参数,把武器封装给对象)
        self.we=we      #we接收的就是a1,(相当于赋值,此时we就是封装好的武器)
class Weapon:
    def __init__(self,name,ad):
        self.name = name
        self.ad = ad
    def fight(self,p1,p2):
        p2.hp=p2.hp-self.ad
        print(‘%s攻击%s,%s掉了%s血,还剩%s血‘ % (p1.name,p2.name,p2.name,self.ad,p2.hp))
p1=Game_role(‘盖伦‘,20,100)
p2=Game_role(‘剑豪‘,50,80)
a1=Weapon(‘大刀‘,60)
a2=Weapon(‘小刀‘,30)
p1.men_weapon(a1)     #组合,在这一步调用封装武器的方法,把武器传给函数进行封装
p1.we.fight(p1,p2)    #这里解释出来就是发起攻击,p1对象使用, we装备好的给p1的武器, fight攻击方法(函数方法) , (p1,p2)是p1攻击p2

原文地址:https://www.cnblogs.com/hdy19951010/p/9360396.html

时间: 2024-10-05 18:08:23

面向对象,类名称空间,查找顺序,组合的相关文章

python\类名称空间和对象名称空间

1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类的数据属性是共享给所有对象 print(id(g1.camp))     #引用的地址是一样的 print(id(Garen.camp)) 输出结果为: 364617767096 364617767096 其中类的函数属性是绑定到所有对象 print(id(g1.attack))      #两个引用地址不一样 print(id(Garen.attac

Python面向对象 类的空间问题

一.Python 类的空间问题 1.1 何处可以添加对象属性 class A: def __init__(self,name): self.name = name def func(self,sex): self.sex = sex # 类外面可以: obj = A('meet') obj.age = 18 print(obj.__dict__) # {'name': 'meet', 'age': 18} # 类内部也可以: obj = A('meet') # __init__方法可以. obj

python 2018.7.24 类空间,对象空间,查询顺序 ,组合

查询顺序: 对象.属性 : 先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找.... 类名.属性 : 先从本类空间找,如果找不到,再从父类找.... 对象与对象之间是互相独立的. 计算一个类 实例化多少对象.例 class Count: count = 0 def __init__(self): Count.count = self.count + 1 obj1 = Count() obj2 = Count() print(Count.count) count = 0 class

20181128(闭包函数,函数嵌套,名称空间,作用域,装饰器待补充)

一.函数对象 在面向对象的编程中 一切皆对象 具体的体现: 1.函数可以被引用 def bar():    print('from bar')?f=barf()输出结果为:from bar 2.函数可以作为函数的参数 def bar():    print('from bar')?def wrapper(func): #func=bar    func() #bar()?wrapper(bar)输出结果为:from bar 3.函数可以作为函数的返回值 def bar():    print('

函数嵌套,名称空间,作用域,函数对象,闭包函数

函数嵌套 嵌套调用是在函数内又调用其他函数 def max(x,y): return x if x > y else y def max4(a,b,c,d): res1=max(a,b) res2=max(res1,c) res3=max(res2,d) return res3 print(max4(1,2,3,4)) 嵌套定义是在函数内又定义其他函数 # def f1(): # print('f1') # def f2(): # print('f2') # def f3(): # print(

函数对象.函数嵌套,名称空间作用域

函数对象 函数使用方法 之前说函数类似于变量,那么有些变量的使用方法在函数上也是适用的 python中一切皆对象,我们可以对它获取内存地址或者打印类型或者其他的操作 1. 引用,赋值 def self_max(x,y): if x > y: return x return y a = self_max #此时a就是函数self_max max_num = a(20,39) print(max_num) 39 2. 当作函数的返回值 def f2(): print('from f2') def f

函数名传递与名称空间

1.关键字参数(了解即可)# 命名关键字参数:在函数定义阶段 写在*与**可变长参数之间的形参# 在给命名关键字参数传值的时候 只能用关键字为其传值# 在定义阶段 给你感觉好像是z是默认值参数 放在了m这个位置参数的前面了 应该报错# 其实z和m都是命名关键字参数 不是默认值参数和位置参数def func(x, y=1, *args, z=3, m, **kwargs): print(x, y) print(args) print(z, m) print(kwargs) func(1, 2, 1

可变长参数、函数对象、嵌套、名称空间和作用域

目录 可变长参数.函数对象.嵌套.名称空间和作用域 一.可变长参数 1.1 可变长形参之* 1.2 可变长实参之* 1.3 可变长形参之** 1.4 可变长实参之** 二.函数对象 2.1.引用 2.2.当做实参参数传给一个形参参数 2.3.可以作为容器类数据类型中的元素 2.4 可以当做函数的返回值 三.函数的嵌套 3.1 函数的嵌套定义 3.2 函数的嵌套调用 四.名称空间和作用域 4.1 名称空间 4.1.1 内置名称空间 4.1.2 全局名称空间 4.1.3 局部名称空间 4.1.4 三

11.11函数对象,名称空间,作用域,命名关键字参数

函数对象 函数是一个对象 函数名可以被引用 函数名可以当做一个参数进行传参 函数名也可以当成返回值,但是不能加括号,不然会直接调用函数 函数名可以当做容器类的元素 函数的嵌套 就是函数内部定义或调用函数 例 def x(): print('x') def y(): print('y') y() x() 名称空间 内置名称空间 python解释器自带的名称空间,开机就有了 全局名称空间 打开python解释器后就形成的名称空间, 局部名称空间 函数内部的名称空间 查找顺序 先从局部查找,在查找全局