_slots_魔术
由于python是一门动态语言,所以我们可以使用_slots_魔术限定,就是只能邦定
1 2 3 4 5 6 7 8
| class Person: _slots_ = ("__name", "__age", "__sex")
def __init__(self, name, age, sex) -> None: self.__name = name self.__age = age self.__sex = sex
|
静态方法和类方法
静态方法
通过直接在类里面def 的方式结果都是类方法,下面是如何创建一个静态方法
1 2 3 4 5 6 7 8 9 10 11
| class Student(Person): def __init__(self, name, age, sex, school) -> None: super().__init__(name, age, sex) self.__school = school
def get_name(self): return super.__name @staticmethod def get_age(): return super.__age
|
类方法
类方法代表了与类本身信息相关的函数,第一个参数规定了是cls
1 2 3
| @classmethod def getClassName(cls): return cls.__name__
|
类之间的关系
- is-a关系也叫继承或泛化,比如学生和人的关系、手机和电子产品的关系都属于继承关系。
- has-a关系通常称之为关联,比如部门和员工的关系,汽车和引擎的关系都属于关联关系;关联关系如果是整体和部分的关联,那么我们称之为聚合关系;如果整体进一步负责了部分的生命周期(整体和部分是不可分割的,同时同在也同时消亡),那么这种就是最强的关联关系,我们称之为合成关系。
- use-a关系通常称之为依赖,比如司机有一个驾驶的行为(方法),其中(的参数)使用到了汽车,那么司机和汽车的关系就是依赖关系。
继承和多态
继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Person: _slots_ = ("__name", "__age", "__sex")
def __init__(self, name, age, sex) -> None: self.__name = name self.__age = age self.__sex = sex
class Student(Person): def __init__(self, name, age, sex, school) -> None: super().__init__(name, age, sex) self.__school = school
def get_name(self): return super.__name
@staticmethod def get_age(): return super.__age
@classmethod def getClassName(cls): return cls.__name__
|
多态
我们也可以对一个父类函数进行重写,当多个子类的调用同一个方法的结果不一样,这个就是多态
抽象类
一定要引入abc
1 2 3 4 5 6 7 8 9 10 11 12 13
| import abc
class Pet(object, metaclass=abc.ABCMeta): """宠物"""
def __init__(self, nickname): self._nickname = nickname
@abc.abstractmethod def make_voice(self): """发出声音""" pass
|