类的三大特性
在面向对象开发过程中经常会听到类的三大特性:封装、继承、多肽
一、封装
封装分两个层面来讲述
- 第一层面的封装:创建类和对象时,分别创建两者的名称空间。只能通过类名加"."或者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('我是猪')