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】P2389电脑班的裁员(DP)
题目链接 sbt交了三遍才过是我的耻辱…… 就是设f[i][j]搞个三重循环DP一下,以上. #include<cstdio> #include<cstdlib> #inclu ...
- 【Luogu】P3709大爷的字符串题(莫队算法)
题目链接 语文题啊…… 看题解发现是让求区间中最多的数的个数,于是果断理解了一会题解……莫队套上完事. sum[i]表示i这个数出现的次数,cnt[i]表示出现i次的数有几个,然后乱搞搞……就好了 # ...
- docker 容器详解
Docker 是一个开源的应用容器引擎,基于Go语言 并遵Apache2.0协议开源,也是一种虚拟化技术.让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux ...
- BZOJ 4584 [Apio2016]赛艇 ——动态规划
Subtask 1 直接$N^2$ $DP$,就可以了 Subtask 2 用$f[i][j]$表示当前位置为$i$,结束元素为$j$的方案数. Subtask 3 看下面 Subtask 4 首先可 ...
- js使用笔记
js使用技巧总结 1,onclick有效是结合alter弹出框 <!DOCTYPE html> <html> <head lang="en"> ...
- zoj 1425 最大交叉匹配
Crossed Matchings Time Limit: 2 Seconds Memory Limit: 65536 KB There are two rows of positive i ...
- bzoj 1196 公路修建问题
bzoj 1196: [HNOI2006]公路修建问题 Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情 ...
- 获取本机外网IP的工具类
ExternalIpAddressFetcher.java package com.tyust.common; import java.io.IOException; import java.io.I ...
- 转 Python爬虫入门二之爬虫基础了解
静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...
- Linux 之 文件内容查看
文件内容查看 参考教程:[千峰教育] 文件内容查看: cat: 作用:一次性顺序显示文件的所有内容 格式:cat file tac: 作用:一次性倒序显示文件的所有内容 格式:tac file hea ...