• python_面向对象


    1. 类名的首字母大写(编码规范推荐)
    2. 类变量 VS 实例变量

                   类变量 存在类中,可以通过类名字直接调用

                   类变量是所有该实例对象公有的区域

                  通过类名调用的是类变量,类变量只能通过类名调用来修改

                  通过实例化对象访问时,若无该实例变量,则访问类变量

                  通过实例化对象修改时,若无该实例变量,则是在该实例对象中添加该属性,而不是修改类变量,实例中不能修改类变量

       3. 构造函数 and 析构函数

        def __init__(self)

        def __del__(self),实例对象销毁时自动做的一些工作

      4. 私有 ,前面加__(两个下划线)

          self.__age = 0  #私有属性,只能在类中被访问

        def __getName(self): #私有方法,只能在类中被访问
                     
    return self.name

      5. 继承

      class Man(Person):
      重写父类方法,
    class Person:
        def __init__(self,name):
            self.name = name
            self.__age = 0  #私有属性,只能在类中被访问
        def __getName(self): #私有方法,只能在类中被访问
            return self.name
        def sleep(self):
            print("{nam} sleep=====".format(nam = self.name))
    
    class Man(Person):
    
        def sleep(self):  #重写父类的函数
            Person.sleep(self)  #调用父类的方法,将子类变量传进去,多态的应用
            print("man is sleep") #重构父类方法
    
    man1 = Man("wang")
    man1.sleep()
    View Code
    重写父类的构造函数:
     __init__()传入的参数需要重写父类的构造函数的参数
    super(Man,self).__init__(name)(新式类写法)
     
    class Person:
        def __init__(self,name):
            self.name = name
            self.__age = 0  #私有属性,只能在类中被访问
        def __getName(self): #私有方法,只能在类中被访问
            return self.name
        def sleep(self):
            print("{nam} sleep=====".format(nam = self.name))
    
    class Man(Person):
        def __init__(self,name,age):  #需要重写调用父类的构造函数,否则会自己覆盖父类的构造函数,掉不到父类的构造函数
            #Person.__init__(name)#经典类写法
            super(Man,self).__init__(name)  #name 为Person 的参数
            self.age = age
        def sleep(self):  #重写父类的函数
            Person.sleep(self)  #调用父类的方法,将子类变量传进去,多态的应用
            print("man is sleep") #重构父类方法
    
    man1 = Man("wang",20)
    man1.sleep()
    View Code
    多继承,继承是有顺序的
       继承中若有多个构造函数时,找到第一个构造函数后就返回
        最先从自己本类中查找,然后再在继承中的类中查找
       Python2中经典类采用深度优先方式查找类的构造函数
       Python3查询时采用广度优先的顺序查找继承的类的构造函数
    class Person:
        def __init__(self,name):
            self.name = name
            self.__age = 0  #私有属性,只能在类中被访问
        def __getName(self): #私有方法,只能在类中被访问
            return self.name
        def sleep(self):
            print("{nam} sleep=====".format(nam = self.name))
    class Work(object):
        def work(self,Where):
            print("{name} work in {whear}".format(name = self.name,whear = Where))
    
    class Man(Person,Work):
        def __init__(self,name,age):  #需要重写调用父类的构造函数,否则会自己覆盖父类的构造函数,掉不到父类的构造函数
            #Person.__init__(name)#经典类写法
            super(Man,self).__init__(name)  #name 为Person 的参数
            self.age = age
        def sleep(self):  #重写父类的函数
            Person.sleep(self)  #调用父类的方法,将子类变量传进去,多态的应用
            print("man is sleep") #重构父类方法
    
    man1 = Man("wang",20)
    man1.sleep()
    man1.work("shanghai")
    View Code
    6.  多态, 一种接口,多种实现,
       可以将子类的指针传给父类,通过传入不同的子类实例,实现不同的功能
        将多态接口写在父类中,若不想实例化调用,可以写成静态方法
  • 相关阅读:
    POJ-1189 钉子和小球(动态规划)
    POJ-1191-棋盘分割(动态规划)
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 729 我的日程安排表 I(二叉树)
    Java实现 LeetCode 728 自除数(暴力)
    Java实现 LeetCode 728 自除数(暴力)
    Java实现 LeetCode 728 自除数(暴力)
  • 原文地址:https://www.cnblogs.com/gongfuxiaozhen/p/8849244.html
Copyright © 2020-2023  润新知