code: def unpack(self, buff, offset=0):
          
          super().unpack(buff, offset)
          if self.tpid.value:
              self._validate()
              self.tpid = self.tpid.value
              self.pcp = self._tci.value >> 13
              self.cfi = (self._tci.value >> 12) & 1
              self.vid = self._tci.value & 4095
          else:
              self.tpid = EtherType.VLAN
              self.pcp = None
              self.cfi = None
              self.vid = None
docs: Unpack a binary struct into this object's attributes.
  
          Return the values instead of the lib's basic types.
  
          After unpacking, the abscence of a `tpid` value causes the assignment
          of None to the field values to indicate that there is no VLAN
          information.
  
          Args:
              buff (bytes): Binary buffer.
              offset (int): Where to begin unpacking.
  
          Raises:
              :exc:`~.exceptions.UnpackException`: If unpack fails.