面向对象的命名空间

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

面向对象的命名空间

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. 建立RSA协商加密的安全信道

    在基于TCP长连接的CS链路中,如何保证数据流的安全性是开发者最关注的问题之一.本文深入浅出的给大家介绍一下在TCP连接中,使用RSA协商加密的方式,建立一个安全加密的通信链路,保证数据传输的安全性. ...

  2. Educational Codeforces Round 11——C. Hard Process(YY)

    C. Hard Process time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  3. windows7下如何生成ssh公钥(git相关)

    1. 安装git,从程序目录打开 "Git Bash"  2. 键入命令:ssh-keygen -t rsa -C "email@email.com"   &q ...

  4. linux下网络监控神器"iptraf-ng"

    优点:监控的网络信息很全面,安装和使用方便   #centos安装: #yum 源使用centos自带的base源即可. yum install -y iptraf-ng   #运行 iptraf-n ...

  5. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E DNA Evolution

    DNA Evolution 题目让我们联想到树状数组或者线段树,但是如果像普通那样子统计一段的和,空间会爆炸. 所以我们想怎样可以表示一段区间的字符串. 学习一发大佬的解法. 开一个C[10][10] ...

  6. 2017 ACM-ICPC 北京区域赛记录

    ------------------------------------------------------------------------------ 出发日 拖着一个大箱子走是真的累. 下午三 ...

  7. 2016Unite Shanghai 总结

    有幸参加了Unite 2016 Shanghai unity开发者大会,这里做一些简单总结 一.日本Marza 分享 <The Gift> Marza用unity做渲染,加上一些自己的扩展 ...

  8. JavaSwing仿QQ登录界面,注释完善,适合新手学习

    使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为“素材”的文件夹. 素材: https://pan. ...

  9. ARC下循环引用的问题

    最初 最近在开发应用时碰到使用ASIHttpRequest后在某些机器上发不出请求的问题,项目开启了ARC,代码是这样写的: @implement MainController - (void) fe ...

  10. uibutton 使用settitle后如何修改其中文字对齐方式

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];            btn.frame = CGRectMake(5, s ...