day 23-1 类的命名空间、组合
类的命名空间
类与对象命名空间
类里 可以定义两种属性
静态属性
动态属性
类中的静态变量 可以被对象和类调用
对于不可变数据类型来说,类变量最好用类名操作
对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的
类里的名字有 类变量(静态属性量)+ 方法名(动态属性)
对象里的名字 对象属性
对象 —— > 类
对象找名字 : 先找自己的 找类的 再找不到就报错
对象修改静态属性的值
对于不可变数据类型来说,类变量最好用类名操作
对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的
实例化方法共享类变量
#实例化方法共享类变量
class Foo():
count = 0
def __init__(self):
Foo.count += 1 f = Foo()
f2 = Foo()
print(f.count) #输出结果:2
print(f.count) #输出结果:2
认识绑定方法
当对象调用方法的时候,就是把对象里面的值传给了方法,这时就发生了绑定关系
def func():pass
print(func) # <function func at 0x0000000000731488> class Foo:
def func(self):
print('func')
def func2(self):
pass
f1 = Foo() print(f1) #<__main__.Foo object at 0x000001F3545E0FD0>
print(Foo.func) #<function Foo.func at 0x00000243F1521AE8>
print(f1.func) #绑定方法 bound method
print(f1.func2)
#<bound method Foo.func of <__main__.Foo object at 0x00000243F1520FD0>>
#<bound method Foo.func2 of <__main__.Foo object at 0x00000243F1520FD0>>
组合
人狗大战之装备化
#人狗大战之装备化
class Person():
def __init__(self,name,aggr,hp):
self.name = name
self.aggr = aggr
self.hp = hp
def bite(self,dog):
dog.hp -=self.aggr
def get_weapon(self,weapon):
self.weapon = weapon
self.aggr += weapon.aggr class Weapon:
def __init__(self,name,aggr):
self.name = name
self.aggr = aggr #技能
def hand18(self,dog):
dog.hp -= self.aggr * 2 class Dog():
def __init__(self,name,aggr,hp):
self.name = name
self.aggr = aggr
self.hp = hp
def bite(self,person):
person.hp -=self.aggr per = Person('鸟人',20,150)
dog = Dog('二哈',50,200)
wuqi = Weapon('打狗棒',50) #print(dog.__dict__) #装备打狗棒
#per.get_weapon(wuqi)
#print(per.weapon)
#per.bite(dog)
#print(dog.hp) #使用技能(组合)
per.jineng = wuqi
per.jineng.hand18(dog)
print(per.jineng.name)
print(per.hp)
print(dog.hp)
组合
一个类的对象是另外一个类对象的属性(一个对象做了别人的属性就叫组合)
什么有什么的关系
class A:
def __init__(self,name):
self.name = 'ysg'
class B:
def __init__(self,year,month,day):
self.year = year
self.month = month
self.day = day b = B(18,1,17)
a = A()
a.birth = b
print(b.year)
print(a.birth.year)
day 23-1 类的命名空间、组合的更多相关文章
- 类的命名空间&组合
类的命名空间◆类中的静态变量可以被类调用也可以被对象调用◆对不可变数据类型来说,类变量最好用类名操作 class Person: money = 0 mother = Person() father ...
- [Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]
Yii 2.0最显著的特征之一就是引入了命名空间,因此对于自定义类的引入方式也同之前有所不同.这篇文章讨论一下如何利用Yii 2.0的自动加载机制,向系统中引入自定义类和命名空间.本文旨在抛砖引玉,如 ...
- 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间
[源码下载] 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 作者:webabcd 介绍速战速决 之 PHP 动态地创 ...
- Python 类的命名空间
Python中类的定义其实就是执行代码块: class cc: a=0 print '+++++', print a 会直接执行print语句而不是在实例化cc时执行.执行后会生成对应的类的命名空间. ...
- php加了命名空间没引入初始化文件:类的命名空间要与文件夹名一致namespace Business\Event;缺少了Event
php加了命名空间没引入初始化文件:类的命名空间要与文件夹名一致namespace Business\Event;缺少了Event
- 编译不通过:提示XXXX不是类或命名空间名 的解决办法
手动写了一个类,需要引入预编译头stdafx.h.结果编译时提示XXXX不是类或命名空间名. 处理方法:将#include "stdafx.h"放在最前面.
- 二十三. Python基础(23)--经典类和新式类
二十三. Python基础(23)--经典类和新式类 ●知识框架 ●接口类&抽象类的实现 # 接口类&抽象类的实现 #①抛出异常法 class Parent(object): ...
- 类型或命名空间名称“Interop”在类或命名空间“Microsoft.Office”中不存在(是否缺少程序集引用?)
准备用C#编写Web程序,生成Excel报表,在使用下面语句时报错. using Microsoft.Office.Interop.Excel; 报错信息:类型或命名空间名称“Interop”在类或命 ...
- day23 01 类的命名空间
day23 01 类的命名空间 一.初识面向对象复习 定义类: class 函数:方法 动态属性 变量:类属性 静态属性 过程: (1)_init_方法:初始化:def _init_(self,参数 ...
随机推荐
- Bloom Filter(布隆过滤器)如何解决缓存穿透
本文摘抄自我的微信公众号"程序员柯南",欢迎关注!原文阅读 缓存穿透是什么? 关于缓存穿透,简单来说就是系统处理了大量不存在的数据查询.正常的使用缓存流程大致是,数据查询先进行缓存 ...
- UltraEdit文本行数多变一和一边多
一.UltraEdit文本行数多行转换成一行 1.文本样式内容 1.qwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiopqwertyuuiop ...
- 使用.Net Core Mvc +SqlSugar +Autofac+AutoMapper+....
开源地址:https://github.com/AjuPrince/Aju.Carefree 目前用到了 SqlSugar.Dapper.Autofac.AutoMapper.Swagger.Redi ...
- js循环获取table中的值
<script type="text/javascript"> function getTdValue() { var tableId = document.getEl ...
- git和github的学习
摘要:Git是个实用而流行的工具,我在网上找了很多教程,发现很多扯来扯去的,难消化,难吸收,而廖雪峰老师的这个教程最好,由浅入深,一步一步跟着做,记录巩固下.原作网址:https://www.liao ...
- [转帖]创建文件或修改文件时间 touch
Linux命令(五)创建文件或修改文件时间 touch https://www.cnblogs.com/ay-a/p/7900274.html touch -t .x86_64.rpm 记得 wind ...
- webmagic保存数据
使用多线程:
- DAY20、垃圾回收机制,正则模块
一.垃圾回收机制1.不能被程序访问到的数据,就称之为垃圾2.引用计数:每一次对值地址的引用都可以使该值得引用计数加1 每一次对值地址的释放都可以使该值得引用计数减一 当一个值的引用计数为0时,该值就会 ...
- 开启ucosii的移植之旅
开启ucosii的移植之旅: 4.6.1.移植和硬件平台的关系 (1)只要是cortex-m3内核内核的soc移植差异都不大. 同内核同soc的不同开发板移植差异都不大. 不同内核的开发板移植难度大, ...
- windows无法完成安装,若要在此计算机上安装,请重新启动安装
当出现如上提示的时候,不要重启,按下shift+f10 会打开命令窗口,先输入cd oobe 进入到C:\windows\system32\oobe文件夹,输入msoobe回车然后输入msoobe即可 ...