zoukankan      html  css  js  c++  java
  • python学习Day19--面向对象的三大特性

    【知识点】

     # python 没有接口这个概念

    1、 接口类,抽象类:制定一个规范

      如下几行代码就是制定规范的过程

    1 from abc import ABCMeta,abstractmethod
    2 
    3 class Payment(metaclass=ABCMeta):# 抽象类(接口类)
    4     @abstractmethod              # 强制执行一个规范,凡是继承我的类中必须有pay方法,否则实例化对象就会报错
    5     def pay(self):   pass        # 制定了一个规范

      具体的一个例子如下:

     1 from abc import ABCMeta,abstractmethod
     2 
     3 class Payment(metaclass=ABCMeta):# 抽象类(接口类)
     4     @abstractmethod              # 强制执行一个规范,凡是继承我的类中必须有pay方法,否则实例化对象就会报错
     5     def pay(self):   pass        # 制定了一个规范
     6 
     7 class Alipay(Payment):
     8     def __init__(self,money):
     9         self.money=money
    10 
    11     def pay(self):
    12         print("使用支付宝支付了%s" % self.money)
    13 
    14 class Jdpay(Payment):
    15     def __init__(self,money):
    16         self.money=money
    17 
    18     def pay(self):
    19         print("使用京东支付了%s" % self.money)
    20 
    21 class Wechat(Payment):
    22     def __init__(self,money):
    23         self.money=money
    24 
    25     def pay(self):             # 归一化设计
    26         print("使用微信支付了%s" % self.money)
    27 
    28 def pay(obj):
    29     obj.pay()
    30 
    31 a1=Alipay(500)
    32 w1=Wechat(200)
    33 pay(a1)         #归一化设计
    34 pay(w1)         #归一化设计

    2、多态:(python面向对象三大特征之一,python中处处是多态)

      没有多态?它有什么?它有鸭子类型

      # 鸭子类型:看着像鸭子,它就是鸭子

     3、封装:(广义)实例化一个对象,给对象空间封装一些属性

         (狭义)私有制

           私有成员:私有静态字段,私有方法,私有对象属性

        #1、私有静态字段:(可以访问,但不要使用)

          对于私有静态字段,只能在本类中内部访问,类的外部,派生均不可访问

     1 # 私有静态字段
     2 class B:
     3     __money=20
     4 
     5 class A(B):
     6     name='alex'
     7     __age=100
     8     def func(self):
     9         print(self.__age)   #可以
    10         print(A.__age)      #可以
    11         print('func....')
    12     def func1(self):
    13         print(self.__money)  #不可以
    14 a1=A()
    15 # print(a1.name)
    16 # print(A.name)
    17 # print(a1.__age)   #实例化对象不能访问私有静态字段
    18 # print(A.__age)    #类名不能访问私有静态字段
    19 
    20 #   对于私有静态字段,类的外部不能访问
    21 a1.func()    # 类的内部可以访问私有静态字段
    22 a1.func1()   # 报错
    23 #   对于私有静态字段,只能在本类中内部访问,类的外部,派生均不可访问

        #2、私有方法:

          对于私有方法,只能在本类中内部访问,类的外部,派生均不可访问

     1 # 私有方法
     2 class B:
     3     __money=1000
     4 
     5     def __f1(self):
     6         print('B')
     7 
     8 class A(B):
     9     name='alex'
    10 
    11     def __func(self):
    12         print('func....')
    13     def func1(self):  # 类的内部可以访问私有方法
    14         # self.__func()
    15         self.__f1()   # 类的派生类也不能访问
    16 a1=A()
    17 # a1.__func()  # 类外部不能访问
    18 a1.func1()

        【一道题】

     1 class Parent:
     2     def __func(self):    # _Parent__func
     3         print('in Parent func')
     4 
     5     def __init__(self):
     6         self.__func()    # 对象.__Parent__func
     7 
     8 class Son(Parent):
     9     def __func(self):    #_Son__func
    10         print('in Son func')
    11 
    12 son1=Son() # 运行结果是?
    13 # 结果:in Parent func

        分析:一开始就产生了_Parent__func,要执行的就是对象._Parent__func

  • 相关阅读:
    .NET 高效开发之不可错过的实用工具(第一的当然是ReSharper插件)
    灵活运用 SQL SERVER FOR XML PATH 转
    Python 3.X 要使用urllib.request 来抓取网络资源。转
    22-1 拖拽与烟花案例
    21、bootstrap框架
    20、promise与ajax jsonp
    18、MySQL
    19、AJAX
    17、php
    16-1 ECMA5与ECMA6的函数定义
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12301325.html
Copyright © 2011-2022 走看看