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,参数 ...
随机推荐
- ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库
字符集为ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库 相信大家都对字符集有相当的了解了,废话就不多说了!直接步入正题:这里主要是测试含有 汉字的数据从ZHS16GBK的数据库导入到 ...
- Python----Kernel SVM
什么是kernel Kernel的其实就是将向量feature转换与点积运算合并后的运算,如下, 概念上很简单,但是并不是所有的feature转换函数都有kernel的特性. 常见kernel 常见k ...
- Python scrapy爬虫数据保存到MySQL数据库
除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...
- maven使用中的问题
1.修改maven的settings.xml后,idea中配置文件指向发生了变化,指向了默认.如果maven配置文件中不是默认的,则需要根据配置文件进行修改.最好在File-Other Setting ...
- JS 基础知识点
最近发现一个好东西,掘金小册,觉得里面的东西挺不错的,准备仔细阅读一下,提升下自己. 记录一下,随便加深点儿印象,主要内容源自于小册. 原始类型 原始类型也成为基本数据类型 boolean null ...
- 在线SQL
有时候为了简单测试一下SQL语法,自己机器上没有安装,可使用在线的SQL环境. 我找到了两个: https://rextester.com/l/sql_server_online_compiler ( ...
- 使用Python操作MongoDB
MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html) MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统 ...
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)
- [powershell]获取FCID&Port
Get-InitiatorID Get-InitiatorPort
- ICPC China Nanchang National Invitational -- D. Match Stick Game(dp)
题目链接:https://nanti.jisuanke.com/t/38223 题意:有一堆火柴构成了一个加减法式子,你可以把火柴重新组合,要求数字个数和原来一样多,每个数字的位数和对应原数字位数一样 ...