一、类和对象命名空间

  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. poj 1852 ants 题解《挑战程序设计竞赛》

    地址  http://poj.org/problem?id=1852 题目描述 Description An army of ants walk on a horizontal pole of len ...

  2. 将静态页面部署到github.io

    背景:   我的腾讯云服务器是之前利用学生身份(有优惠)买的,现在快到期了,而且服务器上面只有一个引导页(静态页面)还有用,别的项目都没有用了.所以就想找一种不花钱买服务器就可以访问到我的引导页的方法 ...

  3. 【2019.10.7 CCF-CSP-2019模拟赛 T2】绝对值(abs)(线段树细节题)

    找规律 设\(p_i=a_{i+1}-a_i\),则答案就是\(\sum_{i=1}^{n-1}p_i\). 考虑若将\(a_i\)加上\(x\)(边界情况特殊考虑),就相当于是将\(p_{i-1}\ ...

  4. plsql查询数据显示为乱码解决方案

    1.首先安装plsql之后连接数据库,发现使用sql查询出来的中文数据是??,即乱码.原因,因为数据库的编码与本地的编码不一致,plsql默认加载的是本机win10的编码. 2.解决办法: 参数如下: ...

  5. import和from...import

    目录 一.import 模块名 二.from 模块名 import 具体的功能 三.import和from...import...的异同 一般使用import和from...import...导入模块 ...

  6. MySQL中使用group_concat遇到的坑

    在使用group_concat的过程中遇到个问题,这里记录一下:在MySQL中有个配置参数group_concat_max_len,它会限制使用group_concat返回的最大字符串长度,默认是10 ...

  7. 一、Mybatis配置详解

    Mybatis配置详解 XML配置文件层次结构 下图展示了mybatis-config.xml的全部配置元素 properties元素 properties是一个配置属性的元素,让我们能在配置文件的上 ...

  8. SecureCRT连接本地虚拟机Linux系统很慢

    SSH配置问题 cd /etc/ssh/ 备份一下配置文件 cp sshd_config sshd_config.2019-07-17.bak 修改配置 vim sshd_config 重启sshd服 ...

  9. Python - 部分PEP8规范

    写代码就像写字一样,为什么有的人写的字十分漂亮,而有的人写的字过后连自己都不认识,最主要还是从一开始是否对自己严格要求.从现在开始就当自己是个初学者,把代码写漂亮点.以下截取了部分PEP8代码规范,里 ...

  10. javascript构造函数深度克隆递归

    <script type="text/javascript"> var obj={ name:'段丛磊', gex:18, sss:['李伟',18], fun:fun ...