python--面向对象组合
面向对象的命名空间
类中的方法
类中的静态属性
对象的属性
类的组合应用
面向对象的命名空间
class A:
country='中国'
a=A()
a.name='alex'
print(a.name) #结果是alex 想要添加属性可以这么添加
b=A()
print(b.name) #结果是没有name的属性
对象中有地址簿来调用类的方法,表现内存不同,不过实际调用内存相同
对象和类调用动态属性表现的地址不一样,实际一样
静态属性完全一样地址
class A:
country='印度'
a=A()
b=A()
a.country='中国'
print(a.country) #中国
print(A.country) #印度
print(b.country) #印度
对于关于类的静态属性:
如果类.属性 调用的就是类中的属性
对象.属性 先从自己的内存空间找名字,找到了用自己的,没找到就用类的,类里没有报错
关于类的动态属性:
这个方法本事就存在类中,并不会存在对象的内存中
在对象调用类中的方法的时候,要依赖于一个地址簿,去类中寻找对应的方法
关于对象的属性
对象的属性就存在对象的命名空间中
只能被对象调用、修改
不能被类调用
面向对象组合
一个对象的属性是另一个对象
可以做到解耦,可以用其他对象做属性
什么有什么的关系
命名空间
类的命名空间和对象的命名空间是分开的,且每个对象都有独立的命名空间,公用一个类的命名空间
继承:
继承是一种新的语法,是类中提供的一种新语法
面向对象三大特性:封装、继承、多态
封装:类里面的属性,其他类或东西没法用
继承:什么是什么的关系
class Animal: #父类,超类
def eat(self):
print('eating')
def drink(self):
print('drinking')
def sleep(self):
print('sleeping')
class Dog(Animal): #子类,派生类 继承方法类加括号后面放继承了谁
pass
class Cat(Animal): #子类,派生类
pass
抽象从小的范围往大的范围走
继承是从大的范围往小的范围走
class Dog(Animal,Bnimal): #可以继承多个
pass
class Animal:
def eat(self):
print('eating%s'% self.food) #self谁调用就是谁
def drink(self):
print('drinking')
def sleep(self):
print('sleeping')
class Dog(Animal):
print('旺旺旺')
class Cat(Animal):
print('喵喵喵') w=Dog()
c=Cat()
w.food='狗粮' #所以可以这么用创建一个food
w.eat() #然后eat里面的self.food就是调用的那个
父类子类都有__init__的话,先调用自己的
想要调用父类__init__的话,用super方法,参数直接传,不用写self
super().__init__()
super就是执行父类
类外面执行的话super()默认不调自己的,调父类的括号前面是类名,后面对象
如果继承多个类,就找能找到的第一个父类里面的方法
class A:
def hahaha(self):
print('A')
class C:
def hahaha(self):
print('C')
class B(A,C):
def hahaha(self):
C.__init__(self,name) #经典类调用父类中方法的方式
super().hahaha() #新式类
print('B') b=B()
b.hahaha()
super(B,b).hahaha()
在继承中
子类可以继承父类的所有属性和方法
但是 当父类和子类中有同名方法的时候 一定调用子类的
如果想使用父类该方法的功能,需要借助super方法4
对象可以调用自己本类和父类的所有方法和属性,先调用自己的,自己没有才调父类的
谁(对象)调用方法,方法中的self就指向谁
例子
class Dong:
def __init__(self,name,food):
self.name=name
self.food=food
self.family='地上'
def eat(self):
print('eat')
def drink(self):
print('drink')
def sleep(self):
print('sleep')
def say(self):
print('say') class Dog(Dong):
def __init__(self,name,food):
super().__init__(name, food)
def swim(self):
print('%sswim,吃%s,住%s'%(self.name,self.food,self.family))
class Bird(Dong):
def __init__(self,name,food):
super().__init__(name, food)
self.family = '天上'
def fly(self):
print('%sfly,吃%s,住在%s'%(self.name,self.food,self.family))
wangcai=Dog('旺财','狗粮')
bage=Bird('八哥','花籽')
wangcai.swim()
bage.fly()
例子2:
class Shuxing:
def __init__(self,name,blood,aggr):
self.name=name
self.blood=blood
self.aggr=aggr
class Person(Shuxing):
def __init__(self,name,blood,aggr,qian):
super().__init__(name,blood,aggr)
self.qian=qian 派生属性
def attack(self,dog): 派生方法
print('%s攻击了%s'%(self.name,dog.name))
dog.blood-=self.aggr
class Dog(Shuxing):
def __init__(self,name,blood,aggr,pz):
super().__init__(name,blood,aggr)
self.pinzhong=pz 派生属性
def attack(self,person): 派生方法
print('%s攻击了%s'%(self.name,person.name))
person.blood -= self.aggr
print(person.blood)
haijiao=Person('ren',2000,100,200)
jifao=Dog('fd',50000,200,'金毛')
haijiao.attack(jifao)
jifao.attack(haijiao)
python--面向对象组合的更多相关文章
- Python 面向对象 组合-多态与多态性-封装-property
面向对象-组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 class Foo: xxx = 111 class Bar: yyy = 222 obj = Foo( ...
- Python面向对象 组合(选课系统示例)
# Author : Kelvin # Date : 2019/1/15 20:44 """ 学校与老师关联 课程与老师和学校关联 """ ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- python 面向对象学习
------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...
- Python面向对象-day07
写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心 ...
- python面向对象-三大特性
python面向对象编程三大特性 小结:前面我们说完了类和对象的关系,相信对类和对象的理解更加透彻..让我们一起去研究面向对象的三大特性吧.... 继承 1.什么继承? 在程序中继承就是事物之间的所属 ...
- python面向对象高级:Mixin多重继承
继上一篇学习笔记:python面向对象的继承与多态,本篇就Mixin扩展类的方法写下学习笔记 Mixin Mixin编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是 ...
- 面向对象——组合、封装、访问限制机制、property内置装饰器
面向对象--组合.封装.访问限制机制.property 组合 什么是组合? 组合指的是一个对象中,包含另一个或多个对象 为什么要组合? 减少代码的冗余 怎么用组合? # 综合实现 # 父类 class ...
- Python面向对象三要素-继承(Inheritance)
Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...
- Python 面向对象(下)
本篇博客承接自Python 面向对象(上) 四. 继承,实现,依赖,关联,聚合,组合 Python面向对象--继承,实现,依赖,关联,聚合,组合 五. 特殊成员 Python面向对象--类的特殊成员 ...
随机推荐
- 【Luogu】P2447外星千足虫(高斯消元)
题目链接 高斯消元解%2意义下的方程,Bitset优化一下. 在消的过程中就能顺便把有解的第一问求出来,记录一下访问过的最大行. #include<cstdio> #include< ...
- 扩展kmp--模板解析
扩展kmp: 用于求串的各个后缀与原串的最长公共前缀的长度: 上图的是字符串自匹配的过程: 图一: 假设现在匹配到i-1了,开始求next [ i ] 的值,此时,k记录的是到目前为止匹配到的最远的位 ...
- 【CCF】最优灌溉 最小生成树
[AC] #include<iostream> #include<cstdio> #include<string> #include<cstring> ...
- oracle 导出表结构信息
直接贴sql: select cols.table_name 表名, cols.column_name 列名, cols.data_type 字段类型, cols.data_length 长度, co ...
- bzoj1433 [ZJOI2009]假期的宿舍 最大流
[ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3429 Solved: 1459[Submit][Status][D ...
- 【BZOJ3529】【SDOI2014】数表 (莫比乌斯反演+树状数组)
传送门 Description 有一张$n\times m$的数表,其第$i$行第$j$列 $(1≤i≤n,1≤j≤m)$ 的数值为能同时整除$i$和$j$的所有自然数之和.现在给定$a$,计算数表中 ...
- iframe平铺到浏览器
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- AForge.NET 设置摄像头分辨率
AForge.NET 老版本在预览摄像头时可通过设置DesiredFrameSize 属性,设置摄像头支持的分辨率,新版本提示已过期: 解决办法: 获取VideoCapabilities属性集合,选中 ...
- python读取Excel实例
1.操作步骤: (1)安装python官方Excel库-->xlrd (2)获取Excel文件位置并读取 (3)读取sheet (4)读取指定rows和cols内容 2.示例代码 # -*- c ...
- Delphi 之Copyrect的使用
http://cqujsjcyj.iteye.com/blog/380970 Copyrect的使用(图片复制.放大.以及做图片放大镜等)一.从一个选取一个区域中的图象到另一个图象组件中的固定区域pr ...