面向对象的命名空间

类中的方法
   类中的静态属性
   对象的属性
类的组合应用

面向对象的命名空间

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--面向对象组合的更多相关文章

  1. Python 面向对象 组合-多态与多态性-封装-property

    面向对象-组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 class Foo: xxx = 111 class Bar: yyy = 222 obj = Foo( ...

  2. Python面向对象 组合(选课系统示例)

    # Author : Kelvin # Date : 2019/1/15 20:44 """ 学校与老师关联 课程与老师和学校关联 """ ...

  3. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  4. python 面向对象学习

    ------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...

  5. Python面向对象-day07

    写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心 ...

  6. python面向对象-三大特性

    python面向对象编程三大特性 小结:前面我们说完了类和对象的关系,相信对类和对象的理解更加透彻..让我们一起去研究面向对象的三大特性吧.... 继承 1.什么继承? 在程序中继承就是事物之间的所属 ...

  7. python面向对象高级:Mixin多重继承

    继上一篇学习笔记:python面向对象的继承与多态,本篇就Mixin扩展类的方法写下学习笔记 Mixin Mixin编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是 ...

  8. 面向对象——组合、封装、访问限制机制、property内置装饰器

    面向对象--组合.封装.访问限制机制.property 组合 什么是组合? 组合指的是一个对象中,包含另一个或多个对象 为什么要组合? 减少代码的冗余 怎么用组合? # 综合实现 # 父类 class ...

  9. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  10. Python 面向对象(下)

    本篇博客承接自Python 面向对象(上) 四. 继承,实现,依赖,关联,聚合,组合 Python面向对象--继承,实现,依赖,关联,聚合,组合 五. 特殊成员 Python面向对象--类的特殊成员 ...

随机推荐

  1. HDU——2093考试排名(string类及其函数的运用以及istringstream)

    考试排名 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  2. JavaScript阻止冒泡和取消事件默认行为

    //功能:停止事件冒泡 function stopBubble(e) { if ( e && e.stopPropagation ) { e.stopPropagation(); } ...

  3. 移动web端使用rem实现自适应原理

    1.先获取到物理像素和实际像素的像素比 var pixclPatio = 1 / window.devicePixelRatio; 2.viewport视口设置为像素比大小 document.writ ...

  4. UVa11542 Square

    /*by SilverN*/ #include<iostream> #include<algorithm> #include<cstring> #include&l ...

  5. 【Visual Studio】The project appears to be under source control, but the associated source control plug-in is not installed on this computer

    [问题描述]用 Visual Studio 2013打开一个项目时,出现下面错误: [问题原因]参考 http://codeverge.com/asp.net.web-forms/the-projec ...

  6. 随机生成指定长度字符字符串(C语言实现)

    相关函数 srand(), rand()头文件#include<stdlib.h> 定义函数 int rand(void) 函数说明 rand()会返回一随机数值,范围在0至RAND_MA ...

  7. Windows下载 Curl 命令

    Windows下载 Curl 命令 描述: 不仅Linux命令行可以使用curl命令下载软件, Windows系统的cmd命令窗口也可以使用curl命令下载,并且更稳定. 原文作者:Wayne Zhu ...

  8. java string中indexOf()常用用法

    Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引. 2.int indexOf(String st ...

  9. LeetCode OJ--Search for a Range

    http://oj.leetcode.com/problems/search-for-a-range/ 要求复杂度为O(lgn),用二分查找的思想. #include <iostream> ...

  10. HDU 5212 Code【莫比乌斯反演】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5212 题意: 给定序列,1≤i,j≤n,求gcd(a[i],a[j])∗(gcd(a[i],a[j] ...