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.  多态, 一种接口,多种实现,
   可以将子类的指针传给父类,通过传入不同的子类实例,实现不同的功能
    将多态接口写在父类中,若不想实例化调用,可以写成静态方法
原文地址:https://www.cnblogs.com/gongfuxiaozhen/p/8849244.html