Python 面向对象编程

  面向对象的三个基本特性:封装、继承和多态

  • 封装:把客观事物封装成抽象的类,类可以把自己的属性和方法只让可信的对象访问,对不可信的对象进行信息隐藏。

  • 继承:继承是一种创建新类的方式,通过继承创建的新类称为子类或派生类,被继承的类称为父类、基类或超类。一个子类可以继承一个或多个父类。

  • 多态:多态性是指父类中成员被子类继承之后,可以具有不同的状态或表现行为。

1. 定义类

class Animal(object):
  def __init__(self, kind):
    self.kind = kind

class是声明类的关键字,这里定义了Animal类,继承了object类,object类是所有类的基类。

2. 创建和使用对象

  一个对象的生命周期包括三个阶段:创建、使用和销毁。销毁对象由Python的垃圾回收机制来完成。

类实例化可以创建对象,就是在类名后面加上一对小括号,会调用类的构造方法。

animal = Animal()

Animal()创建了一个对象,并把对象赋值给animal变量,animal是指向对象的一个引用。

3. 类的成员

  类的成员包括成员变量、成员方法和属性,成员变量又分为实例变量和类变量,成员方法又分为实例方法、类方法和静态方法。

3-1 实例变量

  实例变量就是某个实例对象个体特有的数据,例如你家狗狗的名字、年龄。

class Dog(Animal):
    def __init__(self, name, age):
        self.name = name    # 实例变量
        self.age = age    # 实例变量

dog = Dog('Bai', 2)
print(dog.name)

  构造方法__init__()用来创建和初始化实例变量。第一个参数必须是self,self指向当前实例对象的引用。实例变量通过实例名.实例变量的形式访问。

3-2 类变量

  类变量是所有实例对象所共有的数据,例如所有狗狗都喜欢啃骨头。

class Dog(Animal):
    gnaw_bone = True    # 类变量
    def __init__(self, name, age):
        self.name = name
        self.age = age

print(Dog.gnaw_bone)

  类变量要定义在方法之外。类变量通过类名.类变量的形式访问。

3-3 实例方法

  方法是在类中定义的函数。实例方法定义时第一个参数是self,将当前实例与该方法绑定起来,使该方法成为实例方法。

class Dog(Animal):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 实例方法
    def grow(self): 
        self.age += 1
        return self.age

dog = Dog('Bai', 2)
print(dog.age)
print(dog.grow())

3-4 类方法

  类方法不需要与实例绑定,但需要与类绑定,定义时第一个参数是类的type实例。

class Dog(Animal):
    gnaw_bone = True
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 类方法
    @classmethod
    def gnaw(cls, number):
        number = cls.gnaw_bone * number
        return number

count = Dog.gnaw(5)
print(count)

3-5 静态方法

  静态方法既不与实例绑定,也不与类绑定,只是把类作为它的命名空间。

class Dog(Animal):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 静态方法
    @staticmethod
    def eat(food):
        return food

print(Dog.eat('bread'))

3-6 私有变量和私有方法

  在变量或方法名前加双下画线,就成了私有变量或私有方法。私有变量和私有方法可以在类的内部访问,不能在类的外部访问。

class Dog(Animal):
    def __init__(self, name, age):
        self.name = name
        self.__age = age    # 私有变量
    
    # 私有方法
    def __grow(self):
        self.__age += 1
        return self.__age

4. 类的继承

  子类继承父类时只是继承父类中公有的成员变量和方法,不能继承私有的成员变量和方法。

class Dog(Animal):
    def __init__(self, name, age):
        super().__init__(kind)    # 调用父类的构造方法
     self.name = name
     self.age = age
dog = Dog('Taidi', 'CoCo', 1) print(dog.kind)

重写方法

  如果子类方法名与父类方法名相同,而且参数列表也相同,只是方法体不同,那么子类重写了父类的方法。

5. 类的多态

  发生多态要有两个前提条件:继承——多态发生一定是子类和父类之间;重写——子类重写了父类的方法。

posted @ 2019-05-06 10:30  PIPO2  阅读(259)  评论(0编辑  收藏  举报