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面向对象--类的特殊成员 ...
随机推荐
- hive查询语法
1.创建表: >create table value_data(citing INT,cited INT) >row format delimited >fields termina ...
- HDU2098 分拆素数和
Problem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束. Outp ...
- IP地址资源的分配和管理
IP地址资源的分配和管理 参考资料 https://wenku.baidu.com/view/3bdf94172cc58bd63086bd8c.html http://www.iana.org/ ...
- Git的使用小结
1. git是一种分布式版本控制工具.目前项目中比较常见的版本控制器有SVN.CVS等,这些版本控制工具属于集中式版本控制器.集中式版本控制器,有一个中央服务器,开发人员的开发机从主服务器上下载了项目 ...
- mysql的简单介绍
一 数据类型 分为数值类型,日期时间类型,字符串类型 菜鸟教程网址:http://www.runoob.com/mysql/mysql-data-types.html
- ubuntu通过cifs-utils访问Windows共享目录
ubuntu旧一点的版本如:12.0x是用smbclient访问window共享的,但比较新的版本如:16.04是通过cifs-utils访问Windows共享目录 同样道理先安装: apt-get ...
- Android Tools update proxy
Android Tools Android SDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6: http://mirrors.opencas.cn 端口:80 IPV4/I ...
- MySQL的@与@@区别
MySQL的@与@@区别 @x 是 用户自定义的变量 (User variables are written as @var_name) @@x 是 global或session变量 (@@glo ...
- linux 调试常用命令
top 参数 1 ,查看多核cpu 也可用 mpstat -P ALL pstate PID 查看进程堆栈 pmap -x PID 查看进程 内存段 ldd XXX.so 查看 .so 的link ...
- 計算 battery impedence
Origin 一顆電池被拉載後,會產生電流及電壓如下圖, 如何計算其電池內阻呢 其公式為 R = |delta(V) / delta(I)| 公式推導如下: V1 = 10 - I1R --- 左圖 ...