inheritance of CLASS

发布时间 2023-07-20 17:44:02作者: 言行一

image-20230720152620309

由此进入工作面类的计算的app,子路由及后续如下:

image-20230720153246881

定义了一个名为Init_success的类属性,并将其初始化为False。类属性是属于类本身的属性,而不是类的实例(对象)属性。

其中Ex_Guid = TEXPstopeClass() 是把类赋予给了一个实体,其父级是:

class TBase(models.Model):
    Visible = models.BooleanField(default=True)  # 可见字段,布尔类型
    Enabled = models.BooleanField(default=True)  # 可用字段,布尔类型
    Keyword = models.CharField(max_length=100)  # Keyword字段,Char类型,最大长度为100
    Name = models.CharField(max_length=255)  # name字段,Char类型,最大长度为255
  1. Visible = models.BooleanField(default=True)Enabled = models.BooleanField(default=True) 是布尔类型的字段,名为Visible,默认为True,可能用于标识是否可见;
  2. Keyword = models.CharField(max_length=100) 是一个Char类型的字段,名为Keyword,最大长度为100个字符,可能用于存储关键词信息;Name = models.CharField(max_length=255) 可能用于存储名称信息。
  3. def Input(self, Str): 是一个方法(函数),名为Input,它接收一个参数Str。这个方法的作用是从一个字符串Str中解析数据,并将数据赋值给TBase对象的相应属性,即VisibleEnabledKeywordNameOutput没有接收任何参数,将TBase对象的属性转换成一个字典,并返回该字典。

另一和父级同级的被继承者:

class TG_Stope(TBase):
    S_No = models.CharField(max_length=50)  # 1 工作面编号  16
    S_Name = models.CharField(max_length=255)  # 2 工作面名称  12011
    S_mc_name = models.CharField(max_length=255)  # 3 所在煤层名称 二煤
    ...
        def value_S_input(self, data): # def value_S_input(self, data):这是一个方法(函数),从data字典中提取对应的值,并将这些值赋给TG_Stope对象的属性S_No、S_Name和S_mc_name。这个方法用于将外部数据输入到TG_Stope对象。
        self.S_No = data['S_No']
        self.S_Name = data['S_Name']
        self.S_mc_name = data['S_mc_name']
        ...
        def S_Input(self, Str): # 从一个字符串Str中解析数据(将字符串转换为字典),然后调用value_S_input()方法,将字典中的值赋给TG_Stope对象的属性S_No、S_Name和S_mc_name。

这里面的 def value_S_input(self, data):可以理解成吸收的技能

综上,TEXPstopeClass继承了TBaseTG_Stope的方法和属性

类似地,Ex_Guid = TEXPstopeClass()表示EX_GUID继承了TEXP,即EX_GUID是最新(子)级,上述代码创建了 TG_Stope 类的一个实例,并将其赋值给变量 Ex_Gzm。现在,TEXPstopeClass 类有两个类属性,Ex_BaseEx_Gzm,它们分别是 TBaseTG_Stope 的实例。

  • 对“类的继承”的理解:

    ​ 在Python中,"类的继承"是面向对象编程的一个重要概念,它允许一个类(称为子类或派生类)从另一个类(称为父类、基类或超类)继承属性和方法。通过继承,子类可以重用父类的代码,并且可以在不修改父类代码的情况下添加自己特有的属性和方法,从而实现代码的重用和扩展

    ​ 子类会自动继承父类的所有属性和方法,并且可以通过重写方法或添加新方法来改变或扩展父类的行为。

    下面是一个简单的例子来理解Python中的类继承:

    pythonCopy code	
    # 定义父类
    class Animal:
        def __init__(self, name):
            self.name = name
    # 这个 父类 有一个构造函数`__init__`和一个方法`make_sound`
        def make_sound(self):
            print("Some generic sound")
    
    # 定义子类,继承了 父类(animal)
    class Dog(Animal):
        def make_sound(self):
            print("Woof!")
    
    # 同上
    class Cat(Animal):
        def make_sound(self):
            print("Meow!")
    
    # 对于 “狗” ,用“好孩子”喊他,
    dog = Dog("GOOD BOY !")
    # 会输出“汪”,也就是说根据自己的特性重写了`make_sound`方法,
    dog.make_sound()  # Output: Woof ! ~
    
    # 对于 “猫” ,用“乖姑娘”,
    cat = Cat("CUTE GIRL !")
    # 还是用了父类make sound的方法,但有自己的特色,“喵”
    cat.make_sound()  # Output: Meow ~ ~
    

    通过继承,我们可以实现代码的重用,因为DogCat类无需重新定义__init__方法和make_sound方法,而是直接继承了父类的这些功能。另外,子类还可以添加新的属性和方法,使得代码更具灵活性和可扩展性。

    继承是面向对象编程中的重要特性,它使得代码的设计更加灵活、可维护和可扩展。但同时,应当谨慎使用继承,避免过度依赖继承关系,以免导致类之间过于紧密耦合,影响代码的可读性和维护性。