一、类和对象命名空间

  1.类中可以定义两种属性

  静态属性和动态属性
 class Course:
language = 'Chinese' # 静态属性
def __init__(self, name, score, teacher): # 动态属性
self.name = name
self.score = score
self.teacher = teacher def take(self):
'''
被选修
:return:
'''
pass
  2)访问类中静态属性的两种方式:
print(Course.language)
print(Course.__dict__['language']) python = Course('Python', 99, 'Mr Wang')
java = Course('JAVA', 97, 'Mrs Liu')
  3)对象无法改变类中的静态属性,如果其为不可变类型的话!
python.language = 'English'
print(python.language) # English
print(Course.language) # Chinese
print(java.language) # Chinese
# 查看一下python对象中的属性:新增加了一个language属性,将类中的静态属性覆盖了!但是无法改变类中的属性!
print(python.__dict__) #{'teacher': 'Mr Wang', 'name': 'Python', 'score': 99, 'language': 'English'}
  4)如果类中的静态属性是可变数据类型,其值是可以被改变的,但是属性所对应的内存地址一直没变!
 lass Lamp:
product_from = ['China'] desk_lamp = Lamp()
stree_light = Lamp() print(id(Lamp.product_from))
desk_lamp.product_from[0] = 'Vietnam'
print(Lamp.product_from)
print(id(Lamp.product_from))
  5)小结
  # 类中的静态变量 可以被对象和类调用
  # 对于不可变数据类型来说,类变量最好用类名操作
  # 对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的
2、例子1:计算类被实例的次数
class Foo:
count = 0
def __init__(self):
Foo.count += 1 f1 = Foo()
f2 = Foo()
print(Foo.count)
 3、绑定方法
# 已经了解到,类中的函数叫方法,绑定方法就是类中的方法,被对象调用时,
# 就绑定了该对象,能使用该对象的所有属性!
#   1)、例子2:模拟人生
 class Person:
money = 0
def earn_salary(self):
Person.money += 1000 mother = Person()
father = Person()
mother.earn_salary() # 这就是绑定方法
father.earn_salary() # 这也是绑定方法
print(Person.money)
print(Person.earn_salary) # <function Person.earn_salary at 0x0000022B50B3E730>
print(mother.earn_salary) # <bound method Person.earn_salary of <__main__.Person object at 0x000001775E0E3AC8>>
  2) 联想到每个包中都有一个__init__.py
  # 每当import package 时,其实就是一个类的实例化的过程;
  # 如:import time
  # time.time() time方法绑定了一个time对象
4、总结
# 类里的名字有 类变量(静态属性量)+ 方法名(动态属性)
# 对象里的名字 对象属性
# 对象 —— > 类
# 对象找名字 : 先找自己的 找类的 再找不到就报错
# 对象修改静态属性的值
# 对于不可变数据类型来说,类变量最好用类名操作
# 对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的

二、组合的用法

# 还是从人狗大战引入组合的概念
# 人和狗大战了,如果人的攻击力太弱,怎么办?
# 可以增加一个武器啊!
 class Person:
def __init__(self, name, age, hp, aggr, ginder, money):
self.name = name
self.age = age
self.hp = hp
self.aggr = aggr
self.ginder = ginder
self.money = money def fight(self, dog):
dog.hp -= self.aggr def get_weapon(self, weapon):
self.weapon = weapon class Dog:
def __init__(self, name, aggr, hp, kind):
self.name = name
self.aggr = aggr
self.hp = hp
self.kind = kind def bite(self, person):
person.hp -= self.aggr class Weapon:
def __init__(self, name, price, aggr):
self.name = name
self.price = price
self.aggr = aggr def attack(self, dog):
dog.hp -= self.aggr tom = Person('tom', 22, 500, 100, 'man', 2000)
little_white = Dog('little_white', 150, 300, 'Labrador')
print('被武器袭击前的狗的生命值:', little_white.hp)
weapton = Weapon('Knife', 2000, 300)
if tom.money >= weapton.price:
tom.get_weapon(weapton)
tom.weapon.attack(little_white)
print('被武器袭击后的狗的生命值:', little_white.hp)
else:
print('余额不足,请充值!')
从上例子可以看到组合的使用,由此可以定义了:
组合 :一个对象的属性值是另外一个类的对象
alex.weapon 是 Weapon类的对象
即一个对象有另外一个对象

Python进阶-XV 类和对象的命名空间 组合的更多相关文章

  1. python进阶:类和对象

    @修饰符:将被修饰的函数作为参数,运行修饰函数 实例方法: 静态方法:@staticmethod 类方法:@classmethod 自省:通过一定的机制查询到对象的内部结构 序列类: 列表推导式(例表 ...

  2. python入门17 类和对象

    类:一类事物的抽象化.概念: 类的变量(属于类的变量,定义在类的开始处)  成员变量(self.变量) 类的方法( @classmethod,cls参数)   成员方法( self参数 )  静态方法 ...

  3. Python之面向对象类和对象

    Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object): """ 类里定义一类事物共同的技能. 可以是变量,也可是函 ...

  4. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  5. 初识python中的类与对象

    这篇博客的路线是由深入浅,所以尽管图画的花花绿绿的很好看,但是请先关注我的文字,因为初接触类的小伙伴直接看类的实现可能会觉得难度大,只要耐着性子看下去,就会有一种“拨开迷雾看未来”的感觉了. 一.py ...

  6. python中的类,对象,方法,属性等介绍

    注:这篇文章写得很好.加底纹的是我自己的理解 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...

  7. Python进阶_类与实例

    上一节将到面对对象必须先抽象模型,之后直接利用模型.这一节我们来具体理解一下这句话的意思. 面对对象最重要的概念就是类(class)和实例(instance),必须牢记类是抽象的模板,比如studen ...

  8. Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)

    概念:                                                                                                 ...

  9. Python里的类和对象简介

    ---恢复内容开始--- Python里的类  对象=属性+方法: 对象的属性主要是指主要的特征和参量,而方法主要是指函数: 类是一个具有一定特征和方法的集合,而对象是类的一个:类和对象的关系就如同模 ...

随机推荐

  1. 关于group by的用法 原理

    转载: https://blog.csdn.net/u014717572/article/details/80687042. 写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉grou ...

  2. Ant默认配置文件不是build.xml该如何编写命令进行编译打包

    Ant的构件文件是基于XML编写的,默认名称为build.xml. ant命令默认寻找build.xml文件.若文件名为hello.xml时,读者还需要对命令做少许改变, 改为:ant –f hell ...

  3. perl: warning: Setting locale failed. 解决

    perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAG ...

  4. jmeter进行接口测试--csv参数化,数据驱动-转

    首先我们要有一个接口测试用例存放的地方,我们这里用EXCEL模板管理,里面包含用例编号.入参.优先级.请求方式.url等等. 1:新建一个txt文件,命名为sjqd,后缀名改为csv,右键excel格 ...

  5. Jenkins操作学习 -- 配置及使用

    一.jenkins基本配置 1.在Jenkins首页,点击Manage Jenkins,然后再点击Manage Plugins插件管理,安装必要的插件.这里我只需要安装Git,因为第一次初始化安装没成 ...

  6. ActiveMQ是什么,为什么使用MQ

    是基于 Java 中的 JMS 消息服务规范实现的一个消息中间件. 1.系统解耦 采用中间件之后,就可以完美解决上述中因为耦合可能导致的问题.系统 A 不用去 关心下层服务调用方的问题. 2. 异步调 ...

  7. Python巧用法

    #for 与 else 搭配使用(使用break跳过else) a=[1,2,3,4,5] for i in a: print(i) else: print(i, 'I am else!') for ...

  8. Redis系列---redis简介01

    一. 本章我们将用简短的几句话来帮助你快速的了解什么是redis,初学者不必深究 1 Redis简介 Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写 ...

  9. MySQL入门——MySQL数据库和SQL语言

    MySQL入门——MySQL数据库和SQL语言 摘要:本文主要了解了MySQL关系型数据库和SQL语言的基本知识. MySQL数据库 简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB ...

  10. HTTP:Web的基础

    一.HTTP:Web的基础 1.URI 每个Web服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了.服务器资源名称被称为统一资源标识符(URI) URI有两种形式,分别为URL和U ...