day_21(接口类,抽象类,封装)

class Payment:  # 抽象类,或者接口类:制定一个规范.
    def pay(self):pass

class QQ(Payment):
    def pay(self,money):
        print(‘您用qq支付了%s元‘ % money)

class Ali(Payment):
    def pay(self,money):
        print(‘您用支付宝支付了%s元‘ % money)

class Wechat(Payment):
    def pay(self,money):
        print(‘您用微信支付了%s元‘ % money)

def pay(obj,money):
    obj.pay(money)  # a1.pay(200)

# q1 = QQ()
# a1 = Ali()
# pay(q1,100)  # 统一化设计
# pay(a1,200)
# w1 = Wechat()
# pay(w1,500)
from abc import ABCMeta,abstractmethod

class Payment(metaclass=ABCMeta):    # 抽象类 接口类  规范和约束  metaclass指定的是一个元类
    @abstractmethod
    def pay(self):pass  # 抽象方法

class QQ(Payment):
    def pay(self,money):
        print(‘您用qq支付了%s元‘ % money)
    def ret(self):
        print(‘支付失败....‘)

class Ali(Payment):
    def pay(self,money):
        print(‘您用支付宝支付了%s元‘ % money)

class Wechat(Payment):
    def pay(self,money):
        print(‘您用微信支付了%s元‘ % money)

def pay(obj,money):
    obj.pay(money)  # a1.pay(200)

q1 = QQ()
a1 = Ali()
w1 = Wechat()
# q1 = QQ()
# a1 = Ali()
# pay(q1,100)  # 统一化设计
# pay(a1,200)
# w1 = Wechat()
# pay(w1,500)
# 用处: 在工作中,如果你要是规定几个类必须有一样的方法,
# 你要抽象类,制定一个规范,强制其有此方法.
# python没有多态的概念,但是python崇尚鸭子类型.
# 定义变量的方法:
#1,java c# 需要定义 类型. int i= 3
#2,java c# 没有多继承的概念.
# i = 1
# i = ‘alex‘
# 鸭子类型: 它看着像鸭子,那么他就是鸭子.

# str  list  tuple
str.index()
s1 = ‘alex‘
class Str:
    def index(self):
        pass

class List:
    def index(self):
        pass

class Tuple:
    def index(self):
        pass
#python中好多不同类但同名的方法不是强制规定,而是约定俗成,像上面这三种类,都同样据有index方法,而且功能相似,
# 则 他们三个互称为鸭子.
#封装就是将一些属性或者方法(有用的信息)放置在一个空间中.
#1,封装    对象的封装.
# class Person:
#     def __init__(self,name,age):
#         self.name = name
#         self.age = age
# p1 = Person(‘oldboy‘,1000)
# p2 = Person(‘alex‘,10000)
# print(p1.name)
# print(p2.name)

# 2 封装    (私有成员.)
#类的结构分析:
# class Person:
#     mind = ‘有思想...‘  # 第一部分:所有的公有静态变量,公有静态字段
#     __level = ‘高等动物‘  # 第一部分:私有静态变量,私有静态字段
#     def __init__(self,name,age,sex): # 构造方法  # 第二部分 动态方法,方法(函数)
#         self.name = name   # 公有对象属性
#         self.age = age
#         self.__sex = sex  # 私有对象属性
#     def func(self):   # 第二部分:普通方法
#         print(666)
#     def __func1(self):  # 第二部分:私有方法
#         print(777)
#
#     @staticmethod  #  静态方法
#     def f2():pass
#
#     @classmethod  # 类方法
#     def f2(self): pass
#
#     @property    # 属性
#     def hex(self):pass
#
# 类整体分类:
    #第一部分:  公有静态字段 mind = ‘有思想...‘ ,私有静态字段. __level = ‘高等动物‘
    #第二部分: 特殊方法(__init__(公有属性,私有属性),__str__...)
                # 普通方法  def func(self)
                # 私有方法  def __func1(self):
                #类方法:
                    # @classmethod
                    # def f2(self): pass
                # 静态方法:
                    # @staticmethod  #  静态方法
                    #   def f2():pass
                #属性:
                    # @property  # 属性
                    # def hex(self): pass
# 私有成员: 私有静态字段,私有属性,私有方法   在变量前+ __双下划线.

# 私有静态字段
# class Animal:
#     __cloth = ‘皮毛‘  # _Animal__cloth
#
# class Person(Animal):
#     mind = ‘有思想...‘  # 第一部分:所有的公有静态变量,公有静态字段
#     __level = ‘高等动物‘  # 第一部分:私有静态变量,私有静态字段  # _Person__level
#
#     def __init__(self,name,age): # 构造方法  # 第二部分 动态方法,方法(函数)
#         self.name = name   # 公有对象属性
#         self.age = age
#     def func(self):
#         print(self.__level)
#         print(self._Animal__cloth)
#         print(self.__cloth)
# 在类的外面访问: 私有静态字段是访问不到的.
# p1 = Person(‘alex‘,1000)
# print(p1.mind)
# print(p1.__level)
# print(Person.__level)
# print(Person.__dict__)
# print(Person._Person__level)
# 可以通过对象._类名__变量名  类名._类名__变量名 可以访问到,但是绝对不要这么访问.

# 在类的内部: 私有静态字段是可以访问
# p1 = Person(‘alex‘,1000)
# p1.func()

# 父类的私有静态字段,派生类可否访问? 不可访问.
# p1 = Person(‘alex‘,10)
# print(p1.__cloth)
# p1.func()# 静态字段,类的外部,派生类不能访问,只有内部可以访问

# 私有方法

# class Animal:
#     def __f1(self):print(1111)  # _Animal__f1
#
# class Person(Animal):
#     mind = ‘有思想...‘  # 第一部分:所有的公有静态变量,公有静态字段
#     def __init__(self,name,age): # 构造方法  # 第二部分 动态方法,方法(函数)
#         self.name = name   # 公有对象属性
#         self.age = age
#         self.__sex = sex
#     def __func(self):  # _Person__func()
#         print(666)
#     def func1(self):
#         self.__func()  # self._Person__func()
#     def func2(self):
#         self.__f1()  # self._Person__f1()

# 类外面访问不到.
# p1 = Person(‘OLDBOY‘,1000)
# p1.__func()  #
# 类内部可以方法.
# p1 = Person(‘OLDBOY‘,1000)
# p1.func1()
# 派生类中也是不能访问的.
# p1.func2()
# 私有属性 也是类外部不能访问,派生类不能访问,只能在类内部访问.

# class Animal:
#     def __f1(self):print(1111)  # _Animal__f1
#
# class Person(Animal):
#     mind = ‘有思想...‘  # 第一部分:所有的公有静态变量,公有静态字段
#     def __init__(self,name,age,sex): # 构造方法  # 第二部分 动态方法,方法(函数)
#         self.name = name   # 公有对象属性
#         self.age = age
#         self.__sex = sex
#     def __func(self):  # _Person__func()
#         print(666)

# 总结: 对于私有成员来说,他加载到内存时,都会加上_类名__变量名,所以你在类的外部,或者派生类中都不可访问.
#为什么设置私有成员?
# 有些变量,方法,属性,只在类内部进行使用即可,不便于(不允许)类外部或者派生类去调用.

# class Person:
#     def __init__(self,username,password): # 构造方法  # 第二部分 动态方法,方法(函数)
#         self.usn = username   # 公有对象属性
#         self.__pwd = self.__makepassword()
#     def __makepassword(self):
#         ‘‘‘复杂的加密过程‘‘‘
#         new_pwd = self.__pwd + ‘666‘
#         return new_pwd
# p1 = Person(‘alex‘,‘123‘)
# print(p1.__pwd)

# class A:
#     def __init__(self):
#         self.__func()
#     def __func(self):
#         print(‘IN    A‘)
# class B(A):
#     def __func(self):
#         print(‘IN     B‘)
# b1 = B()

class A:
    def __init__(self):
        self.func()
    def func(self):
        print(‘IN    A‘)
class B(A):
    def func(self):
        print(‘IN     B‘)
b1 = B()
# b1.func()

原文地址:https://www.cnblogs.com/molieren/p/9255750.html

时间: 2024-08-02 16:36:54

day_21(接口类,抽象类,封装)的相关文章

python 2018.7.25 接口类,抽象类

python 没有接口这个概念 接口类,抽象类: 制定一个规范. from abc import ABCMeta,abstractmethodclass Payment(metaclass=ABCMeta): # 抽象类(接口类): @abstractmethod def pay(self): pass # 制定了一个规范 class Alipay(Payment): def __init__(self,money): self.money = money def pay(self): prin

python开发面向对象基础:接口类&抽象类&多态&多继承

一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 开发中容易出现的问题 1 class Alipay: 2 ''' 3 支付宝支付 4 ''' 5 def pay(self,money): 6 print('支付宝支付了%s元'%money) 7 8 class Applepay: 9 ''' 1

接口类抽象类

接口类(抽象类): 在python中是没有接口类,可以把接口类和抽象类视为同一种定义:制定一个规范举例:收到项目经理的要求,写一个支付: #第一版 class Alipay: def __init__(self,money): self.money = money def pay(self): print('zfb支付了%s' % self.money) class Jd: def __init__(self, money): self.money = money def pay(self):

Python_015(面向对象(接口类,抽象类,多态,封装)

一.抽象类与接口类 1.抽象类:抽象即类似或者说比较像的部分,继承描述的是父类与子类的一种关系,要找出这种关系,必须先抽象再继承; a:抽象分成两个层次: 1)由对象->类:将两个有相似地方的对象抽取成类; 2)由类->父类:将两个有相似地方的类抽取成父类; :抽象最主要的作用就是划分类别(可以隔离关注点,降低复杂度) 2.为什么要有抽象类 与Java一样,Python也有抽象类的概念,需要借助模块实现,它是一个特殊的类,特殊之处在于只能被继承,不能被实例化; 类是从一些对象中抽取相同的内容而

php中普通类 接口类 抽象类 浅谈

一.普通类 1.关键词:class  类名,继承关键字extends 2.继承:只能实现单继承, 3.多态:子类继承可以实现多种功能 4.封装:类有权限机制,私有的只能自己用,受保护的可以被继承,子类的权限必须大于等于父类 5.实例化:可以被实例化 二.接口类 1.关键词 :interface  类名   ,继承关键字 implements 2.继承:可以实现多继承,父类有的方法属性,子类必须有,类可以实现多个接口,用逗号来分隔多个接口的名称 3.多态:同样具有多态性 4.封装:所有的方法,属性

面向对象:接口类、抽象类

# python 没有接口这个概念# 接口类,抽象类: 制定一个规范. 接口类,抽象类:python中就是一样的 1,归一化设计. 2,制定一个规范,凡是继承我类的类,必须有我规定的方法. # 第一版 class Alipay: def __init__(self,money): self.money = money def pay(self): print('使用支付宝支付了%s' %self.money) class Jdpay: def __init__(self, money): sel

接口与抽象类 、多态

接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 接口主要是java等语言中的概念,python中并没有明确的限定 from abc import ABCMeta,abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def

类的相关知识(封装、继承、多态、方法、构造方法、接口、抽象类、静态方法、静态变量等)

类 通过抽象,得到的某一个事物的共同特征. 1.类是抽象的,概念的,代表一类事物,比如人类,猫类-- 2.对象是具体的,实际的,代表一个具体事物 3.类是对象的模板,对象是类的一个个体,实例 class Cat           // Java中类名的首字母大写 { //下面的就是类的成员变量.属性 Int age; String name; String color; } 类的结构: Package 包名: Class 类名 extends 父类 implements 接口名 { 成员变量(

19 抽象类 接口类 封装. 多态

主要内容: 1.  抽象类(接口类): 制定一个规范  : from abc import ABCMeta,abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self):pass class Alipay(Payment): def __init__(self,money): self.money = money def pay(self): print('使用支付宝支付了%s' % self.mon