day 23 面向对象的命名空间与组合
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性
而类有两种属性:静态属性和动态属性
1. 静态属性就是直接在类中定义的变量
2.动态属性就是定义在类中的方法.
其中类的数据属性是共享给所有对象的.
>>>id(egg.role)
4341594072
>>>id(Person.role)
4341594072
类的动态属性是绑定到所有的对象的。
>>>egg.attack
<bound method Person.attack of <__main__.Person object at 0x101285860>>
>>>Person.attack
<function Person.attack at 0x10127abf8>
def 类名:
#__init__ 内置 初始化方法
def __init__(self):
self.name ='alex'
#静态属性 --变量
静态属性 =‘中国’ #是直接可以用类名.属性名调用的.
#动态属性--方法(函数)
def attack(self):pass
def bite (self):pass
实例化 创造对象 执行init方法
对象 = 类名()
print(对象.__dict__)
软件重用的重要方式除了继承之外还有另外一种方式,即:组合
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
求环的面积
from math import pi
class Circle:
def __init__(self,r):
self.r =r
def area(self):
return pi*(self.r**2)
def perimeter(self):
return 2*pi*self.r
class Ring:
def __init__(self,outer,inner):
self.outer =Circle(outer)#=
self.inner =Circle(inner)
def area(self):
return self.outer.area() -self.inner.area()
def perimeter(self):
return self.outer.perimeter() +self.inner.perimeter() r = Ring(10,3)
print(r.area())
print(r.perimeter())
老师与生日的例题
class Brithday:
def __init__(self,year,month,day):
self.year = year
self.month =month
self.day =day
class Teacher:
def __init__(self,name,sex,course,birth):
self.name=name
self.sex =sex
self.course =course
self.birth =shengri
shengri = Brithday(1993,3,6)
laoshi = Teacher("alex",'male',"python",shengri)
print(shengri)
import time
if shengri.month== time.localtime().tm_mon and shengri.day == time.localtime().tm_mday :
print("%s生日快乐," %(laoshi.name))
print(time.localtime().tm_year - shengri.year ) 输出结果:
<__main__.Brithday object at 0x020F9930>
alex生日快乐,
day 23 面向对象的命名空间与组合的更多相关文章
- python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)
python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...
- day24 面向对象,交互,组合,命名空间,初始继承
面向对象的命名空间: #属性:静态属性 (直接和类名关联或者直接定义在class下的变量) # 对象属性 (在类内和self关联,在类外和对象名关联的变量) # 动态属性(函数) class Foo: ...
- python全栈开发 * 23 面向对象 知识点汇总 * 180704
23 面向对象 -----特殊方法 1. isinstance(obj,类名) 判断对象是否是此类实例化或者此类的子类实例化出来的class A:passclass B(A):passb1=B()pr ...
- day23:类的命名空间和组合
1,类属性:静态属性,方法:动态属性:双下init方法,每当我们调用类的时候就会自动的触发这个方法,默认传self,在init方法里面可以对self赋值:在类的内部,self就是一个对象,我们自己实例 ...
- python学习之老男孩python全栈第九期_day023知识点总结——类和对象命名空间、组合
一. 类和对象命名空间类里 可以定义两种属性: 1. 静态属性 2. 动态属性 class Course: language = 'Chinese' def __init__(self, teache ...
- day 23-1 类的命名空间、组合
类的命名空间 类与对象命名空间 类里 可以定义两种属性 静态属性 动态属性 类中的静态变量 可以被对象和类调用对于不可变数据类型来说,类变量最好用类名操作对于可变数据类型来说,对象名的修改是共享的,重 ...
- Day 23 类的继承,派生,组合,菱形继承,多态与多态性
类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...
- Python学习日记(二十三) 类命名空间和组合
类命名空间 在一个类中它的函数(方法)属于动态属性,直接定义的变量属于静态属性 首先先定义一个类,并在这个类里面加入静态变量.属性等然后将一个对象实例化 class Fighter: #定义一个战机的 ...
- day 23 面向对象二
复习 '''1.面向过程与面向对象 过程:程序流程化,可拓展性差 对象:程序流程多样化,可拓展性强 变量 | 函数 => 属性 | 方法:前者直接使用,通过所属者.语法调用2.拥 ...
随机推荐
- 无法更新 EntitySet 因为它有一个 DefiningQuery
DbFirst 使用 MVC+EF+仓储+ADO.NET实体数据模型 无法更新 EntitySet“Book”,因为它有一个 DefiningQuery definingqueryentityfram ...
- LFS(Linux From Scratch)学习
一.简介 LFS──Linux from Scratch,就是一种从网上直接下载源码,从头编译LINUX的安装方式.它不是发行版,只是一个菜谱,告诉你到哪里去买菜(下载源码),怎么把这些生东西( ra ...
- pkg_config找不到库
解决方法 假设libavutil默认安装时libavutil.pc安装到了 /usr/lib64/lib/pkgconfig/ 中,而 echo $PKG_CONFIG_PATH 结果中没有这个路径, ...
- Netty 系列(三)Netty 入门
Netty 系列(三)Netty 入门 Netty 是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序.更多请参考:Netty Github 和 Netty中文 ...
- 泛型约束where条件的使用(可以通过类型参数动态反射创建实例)
定义抽象的人类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- cxf soap rest webservice spring
1. 导入 jar 包 2. 编写接口 3. 编写实现 4. 配置spring 配置文件 5. 配置web.xml servlet 6. 访问 package com.diancai.test; im ...
- easyjweb ejs 2014.2.25
一 .简单 easyjweb 项目 1. 创建一个web 项目 , 将easyjweb-corejar 包 和required 包下的所有jar 包拷到项目下. 2.写一个 action .. pa ...
- linux 操作系统rz sz 快速上传和下载文件
## Centos 安装 rz sz yum install lrzsz ### Ubuntu 安装 apt-get install lrzsz
- 2018.09.16 bzoj1086: [SCOI2005]王室联邦(贪心)
传送门 就是给树分块. 对于一个节点. 如果它的几棵子树加起来超过了下限,就把它们分成一块. 这样每次可能会剩下几个节点. 把它们都加入栈中最顶上那一块就行了. 代码: #include<bit ...
- 微信小程序 获取用户openid
1,可以在小程序app.js入口文件中放入登录代码 wx.login({ success: res => { // 登录注册接口 if (res.code) { // 调用服务端登录接口,发送 ...