zoukankan      html  css  js  c++  java
  • Python中的封装,继承和多态

    面向对象的三大特性:封装,继承和多态

    封装:在类的内部定义属性和方法,通过对象或类名来访问属性和方法,隐藏功能的实现细节,也可以设置访问权限。

    广义的封装:实例化一个对象,给对象空间封装一些属性;狭义的封装:私有制;私有成员:私有静态字段,私有方法,私有对象属性

    继承:子类需要重用父类的属性和方法,子类中也可以定义自己的属性和方法。

    多态:python是弱类型语言,python中处处是多态;python中没有多态,但是有鸭子类型  ==》一些类含有相同的方法,则这些类就互称为鸭子

    下面这几个类都有index方法,index具有相同的作用,则这几个类就互称为鸭子

    class Str:
          def index(self):
                pass
    
    class List:
          def index(self):
                pass
    
    class Tuple:
          def index(self):
                pass
    

      对于私有成员,类的外部不能访问,子类(派生类)也不可以访问,只能在本类的内部访问

    class Animal:
          head = "True"  #静态变量(静态字段)
          body = "True" #静态变量(静态字段)
          __color = "red" #私有静态变量(私有静态字段)
          __skin = "black" #私有静态变量(私有静态字段)
          def __init__(self,name,age): #特殊方法
                self.name = name #对象属性(普通字段)
                self.age =age #对象属性(普通字段)
          def eat(self):#普通方法
                print("所有动物都需要吃……")
          def drink(self):#普通方法
                print("所有动物都需要喝……")
          def __func(self):#私有方法
                print("Animal fun")
    
          def fun(self):
                self.__func() #私有方法在类的内部可以访问
    class Dog(Animal):
         pass
    
    a1 = Animal("小猫",2)
    ##print(a1.head,a1.body)
    ##a1.eat()
    ##print(a1.__color) #报错 对象不可以访问类的私有静态变量
    ##a1.__func() #报错 对象不可以访问类中私有方法
    
    ##print(Animal.head)
    ##print(Animal.__color) #报错 类名不可以访问类中的私有静态变量
    ##Animal.__func() #报错 类名不可以直接访问类中的私有方法
    
    d = Dog("小狗","2")
    #print(d.head)
    #print(d.__color) #报错 子类不可以访问父类的私有静态变量
    #d.__func() #报错 子类不可以访问父类的私有方法
    
    d.fun()
    

      

  • 相关阅读:
    css取消input、select默认样式(手机端)
    Vue解决sass-loader的版本过高导致的编译错误
    在Vue项目中引入element-ui,显示结果没有样式的问题
    修改Vue项目打开指定浏览器和修改端口号
    Vue如何关闭eslint
    停止事件冒泡
    子组件中定义的方法如何传给父组件调用了呢?
    vue自定义时间过滤器之使用date-fans代替moment
    面试5(每日打卡)
    2019.10.22
  • 原文地址:https://www.cnblogs.com/tanxu05/p/9904970.html
Copyright © 2011-2022 走看看