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()
    

      

  • 相关阅读:
    gym102215题解
    Codeforces6E_Exposition
    Codeforces893F_Subtree Minimum Query
    是男人就过八题A_A String Game
    gym101666题解
    gym102201E_Eat Economically
    gym102346题解
    C++输入函数用法
    迷宫问题(BFS+保存路径) POJ No.3984
    【BFS】迷宫的最短路径问题
  • 原文地址:https://www.cnblogs.com/tanxu05/p/9904970.html
Copyright © 2011-2022 走看看