类的三大特性

在面向对象开发过程中经常会听到类的三大特性:封装、继承、多肽

一、封装

封装分两个层面来讲述

  • 第一层面的封装:创建类和对象时,分别创建两者的名称空间。只能通过类名加"."或者obj.的方式访问里面的名字
  • 第二层面的封装,类中把某些属性和方法隐藏起来,或者定义为私有,只在类的内部使用,在类的外部无法访问,或者留下少量的接口(函数)供外部访问

二、继承

前面我们介绍了python是多继承的(也不是说必须要继承,默认要继承object)

  • 1、创建一个不继承的类

    class SchoolMember(object):
        members = 0
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def tell(self):
            pass
    
        def enroll(self):
            """
            注册
            """
            SchoolMember.members += 1
            print("\033[32;1mnew member [%s] is enrolled,now there are [%s] members.\033[0m " % (
                self.name, SchoolMember.members))
    
  • 2、创建一个继承一个类的类

    class Teacher(SchoolMember):
        def __init__(self, name, age, course, salary):
            super(Teacher, self).__init__(name, age)
            self.course = course
            self.salary = salary
            self.enroll()
    
        def teaching(self):
            """
            讲课方法
            """
            print("Teacher [%s] is teaching [%s] for class [%s]" % (self.name, self.course, 's12'))
    
        def tell(self):
            """
            自我介绍方法
            """
            msg = '''Hi, my name is [%s], works for [%s] as a [%s] teacher !''' % (self.name, 'Oldboy', self.course)
            print(msg)
    
  • 3、创建一个多继承的类

    class ParentClass1(object):
        pass
    
    class ParentClass2(object):
        pass
    
    class ParentClass3(ParentClass1, ParentClass2):
        pass
    

三、查看类的继承

  • 1、__base__只查看从左到右继承的第一个子类
  • 2、__bases__则是查看所有继承的父类,返回一个元祖

    print(ParentClass2.__base__)
    print(ParentClass3.__bases__)
    

四、关于继承的写法(看自己喜欢用哪种方式)

  • 1、定义一个父类

    class Animal(object):
        def __init__(self, name, color):
            self.name = name
            self.color = color
    
        def sleep(self):
            print('%s在睡觉' % self.name)
    
        def call(self):
            print('动物在叫')
    
  • 2、super中不写东西

    class Dog(Animal):
        def __init__(self, name, color, age):
            super().__init__(name, color)
            self.age = age
    
        def sleep(self):
            # 调用父类的方法
            super().sleep()
    
        def call(self):
            print('狗在叫')
    
  • 3、super(类名, self)

    class Snake(Animal):
        """
        定义一个蛇的类
        """
    
        def __init__(self, name, color, address):
            super(Snake, self).__init__(name, color)
            self.address = address
    
        def sleep(self):
            super(Snake, self).sleep()
    

五、多肽的认识

多肽的基础是继承,多个子类调用父类的一个方法,产生不同的结果就是多肽

import abc

class Animal(metaclass=abc.ABCMeta):
    """
    定义一个抽象类
    """

    @abc.abstractmethod
    def talk(self):
        pass

class Person(Animal):
    def talk(self):
        print('hello word')

class Dog(Animal):
    def talk(self):
        print('汪汪的叫')

class pig(Animal):
    def talk(self):
        print('我是猪')

results matching ""

    No results matching ""