13-2 面向对象补充

接口类

c# 、java 都是面向对象编程的语言。在开发的过程中,有一种设计模式叫做接口。

  • 接口类:python原生不支持
  • 抽象类:python原生支持的
from abc import abstractmethod,ABCMeta

class Payment(metaclas=ABCMeta): # 元类,默认的元类,type
    @abstractmethod
    def pay(self,money):pass #没有实现这个方法

规范:接口类或者抽象类都可以

接口类:支持多继承,接口类中的所有方法都必须不能实现--Java

抽象类:不支持多继承,抽象类中方法可以有一些代码的实现--Java

class Wechat(Payment):
    def pay(self,money):
        print(f'已经用微信支付了{money}元')

class Alipay(Payment):
    def pay(self,money):
        print(f'已经用支付宝支付了{money}元')

class Applepay(Payment):
    def pay(self,money):
        print(f'已经使用applepay支付了{money}元')

def pay(pay_obj,money): # 统一支付入口
    pay_obj.pay(money)

# wechat = Wechat()
alipay = Alipay()
# app = Applepay()
# wechat.pay(100)
# alipay.pay(200)
p = Payment()

接口类的多继承

from abc import abstractmethod,ABCMeta

class Swim_Animal(metaclass = ABCMeta):
    @abstractmethod
    def swim(self):pass

class Walk_Animal(metaclass = ABCMeta):
    @abstractmethod
    def walk(self):pass

class Fly_Animal(metclass = ABCMeta):
    @abstractmethod
    def fly(self):pass

class Tiger(Walk_Animal,Swim_Animal):
    def walk(self):pass
    def swim(self):pass

class OldYing(Fly_Animal,Walk_Animal):pass
class Swan(Swim_Animal,Walk_Animal,Fly_Animal):pass

#接口类 刚好满足接口隔离原则,面向对象开发的思想  规范

抽象类

python中一切皆文件

import abc # 利用abc模块实现抽象类

class All_File(metaclass=abc.ABCMeta):
    all_type='file'
    @abc.abstractmethod #定义抽象方法,无序实现功能
    def read(self):
        '''子类必须实现read功能'''
        pass

    @abstractmethod # 定义抽象方法,无需实现功能
    def write(self):
        '''子类必须实现write功能'''
        pass

class Txt(All_file): # 子类继承抽象类,但是必须定义read方法和write方法
    def read(self):
        print('文本数据的读取方法')
    def write(self):
        print('文本数据的读取方法')

class Sata(All_File): # 子类继承抽象类,但是必须定义read和write方法
    def read(self):
        print('硬盘数据的读取方法')
    def write(self):
        print('硬盘数据的读取方法')

class Process(All_file): # 子类继承抽象类,但是必须定义read和write方法
    def read(self):
        print('进程数据的读取方法')
    def write(self):
        print('进程数据的读取方法')

wenbenwenjian = Txt()
yingpanwenjian = Sata()
jinchengwenjian = Process()

# 这样大家都是被 归一化了,也就是一切皆文件的思想
wenbenwenjian.read()
yingpanwenjian.write()
jinchengwenjian.read()

print(wenbenwenjian.all_type)
print(yingpanwenjian.all_type)
print(jinchengewenjian.all_type)

抽象类 是一种开发规范。

一般情况下,单继承能实现的功能都是一样的,所以在父类中可以有一些简单的基础实现

多继承的情况:由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中

无论是抽象类还是接口类,都是面向对象的开发规范,所有的接口类和抽象类都不能实例化。

扩展

Java:Java里的所有类的继承都是单继承,所以抽象类完美的解决了单继承需求中的规范问题。

相对于多继承的需求,由于Java本身语法的不支持,所以创建了接口Interface这个概念来解决多继承的规范问题。

python:python中没有接口类。python中自带多继承,所以我们直接用class来实现了接口类。

python中支持抽象类:一般情况下 单继承 不能实例化。python可以代码实现

多态

什么是多态?

python是动态强类型的语言。崇尚鸭子类型。

优点:松耦合,每个相似的类之间都没有影响。

缺点:太随意了,只能靠自觉

类和对象的绑定方法和非绑定方法

@property

让类内部的函数方法变成属性

@bmi.setter 和 @bmi.deleter

让这个函数方法 bmi() 可以进行属性一样的修改和删除,
所以 @bmi.setter 和 @bmi.deleter 装饰的函数方法名必须是property装饰的函数方法名bmi(),而不可以是随意定义的函数名字,如果换成其他名字会报错,显示的就是该属性(实际是个函数)无法进行修改或删除。

随意定义函数方法名是 类属性方法使用property 可以拥有的,把这个记混了。

原文地址:https://www.cnblogs.com/chenych/p/11082550.html

时间: 2024-10-09 10:08:11

13-2 面向对象补充的相关文章

php面向对象补充

面向对象补充 __tostring的方法 class Ren{ public $name; public function __tostring(){ return "这是人类,有成员变量name代表名称"; } } $r = new Ren(); echo $r; 自动调用tostring方法. 克隆对象的方法 class Ren{    public $name;        public function __tostring(){        return "这是

Python 面向对象-------补充

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定

JavaSE入门学习24:Java面向对象补充

一Java中的Object类 Object类是所有Java类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认 继承Object类. public class Person{ // } //等价于 public class Person extends Object{ // } Object类中的方法,适合所有子类. 1)toString()方法 在Object类中定义有public String toString()方法,其返回值是String类型,描述当前对

13章面向对象

13.4.1 类的数据属性 数据属性仅仅是所定义的类的变量,这种属性要么是由类的方法来更新,要么是主程序其他地方更新,这种属性类似Java中静态变量.这种数据是与所属类对象绑定不依赖于任何类实例.类属性仅于类相关,和实例属性不同,类属性和实例无关. >>> class C(object): foo = 100 >>> print C.foo 100 >>> C.foo = C.foo+1 >>> C.foo 101 >>&

python面向对象补充

如何使用类 一.实例化:创建对象 例子一 x=int(10) print(x) python中一切皆为对象,且python3统一了类与类型的概念,类型就是类 >>> dict #类型dict就是类dict <class 'dict'> >>> d=dict(name='egon') #实例化 >>> d.pop('name') #向d发一条消息,执行d的方法pop. 'egon' 例子二: class Garen: camp='Demaci

python8之面向对象补充之使用场景

一.概述 之前我们学了面向对象知识,那我们在什么时候用呢?不可能什么时候都需要用面向对象吧,除非你是纯的面向对象语言,好的,我们下面就来谈谈 二.知识回顾 2.1 什么是面向对象? 在学面向对象之前我们都是用:函数 面向对象编程其实就是:类 + 对象 2.2 什么是类,什么是对象,它们之前又有什么关系? class 类名: def 函数1(): pass def 函数2(): pass # obj是对象,是一个实例化的 obj = 类名() obj.函数1() 三.使用场景 3.1 提取公共功能

Day8 面向对象(补充)

私有字段 class Foo: def __init__(self, name): self.__name = name def f1(self): print(self.__name) class Bar(Foo): def f2(self): print(self.__name) obj = Foo('alex')#print(obj.name)#只能内部调用obj.f1() obj2 = Bar('aaa')obj2.f1()#私有普通字段只有自己能访问,其余均不行obj2.f2() 静态

13.php面向对象

1.构造函数 public __construct() {} 2.析构函数 public __destruct() {} 3.对象调用属性 //数以调用时候要用    -> 而不是Java的点..... $per = new Person(); //这里不要美元符号 echo $per->age; <?php class Person { public $age = 12; public function __construct() { echo 'show'; } public fun

JAVA 面向对象补充[toString方法和equals方法]

一.toString  方法 这里的toString  和 C#的To string 是两回事. JAVA中to string : Object类中都有一个to string() 方法,创建的每一个类都会继承这个方法,返回一个对象的String 表示. 代码: 注释代码后结果: 取消注释后结果: 二.equals方法