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 Count:    count = 0    def __init__(self):        pass

通过类名可以更改我的类中的静态变量值Count.count = 6print(Count.__dict__)

但是通过对象 不能改变只能引用类中的静态变量

obj1 = Count()print(obj1.count)obj1.count = 6

 组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象.例
 版本二:class GameRole:    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))

def armament_weapon(self,wea):        self.wea = wea

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血,还剩%s血‘\              % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))

p1 = GameRole(‘大阳哥‘,20,500)p2 = GameRole(‘印度阿宁‘,50,200)axe = Weapon(‘三板斧‘,60)broadsword = Weapon(‘屠龙宝刀‘,100)# print(axe)p1.armament_weapon(axe)  # 给大阳哥 装备了三板斧这个对象.# print(p1.wea)# print(p1.wea.name)# print(p1.wea.ad)p1.wea.fight(p1,p2)
 


原文地址:https://www.cnblogs.com/xdlzs/p/9360345.html

时间: 2024-11-06 16:40:20

python 2018.7.24 类空间,对象空间,查询顺序 ,组合的相关文章

Python学习心得:类与对象

教材:<简明Python教程> Python面向对象: 如shell这种面向过程的程序都是通过"操作数据的函数"或者"语句块"来设计函数. python的程序(面向对象): 类是一个"class"类型,对象是类中的一个实例. 类的属性包括了:域和方法.(即变量和函数) 属于一个对象或类的变量被称为域,一个定义在类中的函数,叫做类的方法. 类使用关键字"class"来创建.域和方法放在同一个缩进块中. 1.域有两种:

Python 基础入门 6_1 类与对象

# 类:一种数据类型,本身并不占内存空间,跟所学过的number等类型,一个类由属性(变量)和方法(函数)组成# 对象: 要使用类内部的属性和方法,就需要实例化类,这种实例化类就叫做对象 """定义类类名:首字母大写,其他遵循驼峰原则属性:其他遵循驼峰原则行为(方法/功能):其他遵循驼峰原则 创建一个类,格式如下:class 类名(): 定义属性(定义变量) 定义方法(定义函数)#在类中定义方法(函数)时,第一个参数名为self,表示对象名 构造函数:__init__(sel

Python 3.5(类与对象)

类与对象 面向对象编程是最有效的方法之一,在面向对象编程中,可以编写表示现实世界中的事情和情景的类,并且基于这些类来创建对象.编写类时候,还可以定义一大堆类对象都有通用行为,基于这些类创建对象时,每个对象都自动具备这种通用行为,然后可以根据需要赋予对象独立的属性. 根据类来创建的对象被称为实例化 类的简单使用效果 #!/use/bin/env python3 #-*-conding:UTF-8-*- class Dog(): #创建一个Dog类,在python中首字母大写的名称指的是类 def

笨办法学习python之模块、类、对象

模块就像字典 字典是python中唯一映射关系,它用一个事物对应另外一个事物,也就是所谓的key->value. 模块包含一些变量和函数,可以导入,并且可以用点(·)来操作访问变量和函数. 记住'从X获取Y的概念'. 他们相似,只是语法不同. 1.也就是说在python中有一条通用的模式: (1)有一个key =value的容器 (2)通过key从容器中获取数据 不同点: 在字典中key是字符串,写法为[key]:在模块中写法为.key,其余的地方一模一样. 类就像模块 可以认为模块就是pyth

20180724 (面向对象:类的命名空间和查询顺序丶组合)

一.类的名称空间 类名()  产生了一个含有对象指针的空间 先执行代码 从上向下执行 首先执行到class的时候,创建了一个Person类的空间,其中有静态变量和方法以及方法的内存地址 之后执行到p1 = Person()的时候,又创建了一个p1的实例空间,当还没读到括号里面的参数的时候,此时该实例空间里只有一个指示牌是指向Person类空间的 当执行到括号里面的内容的时候,此时实例空间里多了country = "菲律宾",name = "alex",age = 4

Python学习笔记008_类_对象

# 对象 = 属性 + 方法>>> # Python中的类名约定以大写字母开始>>> # tt = Turtle() 这就是创建类实例的方法,其它语言用new ,它是不需要的>>> >>> # Python中的self就相当于Java中的this >>> # self ,一般都放在方法的第一个参数中这是默认的要求 class Ball: def setName(self,name): self.name=name d

类和对象的初始化顺序

父类 package com.day06; public class StaticDemo { //静态代码块 int num=3; static{ System.out.println("父类静态代码块 --A"); } //构造代码块 { System.out.println("父类构造代码块 ---A "+this.num); } public StaticDemo(){ System.out.println("父类构造方法---A");

Python类和对象

在设计之初,Python 就被设计成支持面向对象的编程语言,因此 Python 完全能以面向对象的方式编程.而且 Python 的面向对象比较简单,它不像其他面向对象语言提供了大量繁杂的面向对象特征,它致力于提供简单.够用的语法功能. 正因为如此,在 Python 中创建一个类和对象都很容易.Python 支持面向对象的三大特征:封装.继承和多态,子类继承父类同样可以继承到父类的变量和方法. 面向对象相关术语 在系统学习面向对象编程之前,初学者要了解有关面向对象的一些术语.当和其他人讨论代码的时

JavaScript 浅析数组对象与类数组对象

数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() shift() unshift() reverse() sort() slice() splice() 类数组对象 定义 举例 对比数组 转换 间接 直接 数组(Array对象) 数组就是一组数据. 在JavaScript中没有数组这种数据类型.数组时对象创建的. 键(下标): 用于区分数组中不同数值的